Я пишу несколько кодов для получения URL от окна ползунка изображения домашней страницы Yahoo, которое встраивается через JavaScript, поэтому я использую Селен для моделирования человеческого действия щелчка. Иллюстрация кода и деталей присоединяется в файле Python. Помогите мне понять это.
'''Since Ubuntu do not have physical FireFox Browser, so I use
xvfbwrapper to create the environment,
I only add it on the server site. Local testing, I did not add it.
'''
#from xvfbwrapper import Xvfb
#with Xvfb() as xvfb:
from selenium import webdriver
import selenium.webdriver.support.ui as ui
url_path="https://sg.yahoo.com"
driver = webdriver.Firefox()
driver.get(url_path)
#wait until the Crawler find the Carousel-Ranges Class which is the image slider (it contains all the urls which i need)
first_result = ui.WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_class_name('Carousel-Ranges'))
#get the number of url to implement the for loop
imageRange = first_result.text
numString = imageRange.split("of ")
numInt = int(numString[1])
print numInt #print total number of URL that extracted through text
for x in range(0,((numInt-10)/5)+1):
#simulate the click action. every single click, the javascript will enable 5 more urls so I can use "li.Cur-p a"
#to get, and by default there are only 10 urls which are enabled.
driver.find_element_by_css_selector("button[class*='End-0 T-0 B-0 Fz-30 Z-1']").click()
topNews = driver.find_elements_by_css_selector("li.Cur-p a");
#print out the urls list that cralwed. If it matches with previous number
# then it means I successfully get the result.
print len(topNews)
Но этот код только осуществим для локального тестирования. Когда я добавляю xvfbwrapper и помещаю его в сервер, он не работает. Беря пример, если общие URL 60, поисковый робот работает локальный, который возвратил тот же результат (с 60 успехами); но когда сервер выполняет его, это только возвращается 10, который является URL по умолчанию. Поэтому я вывожу проблему, может вызвать этим xvfbwrapper. Но я не делаю, как решить его. Кто-либо может обратиться по этому вопросу? Еще раз спасибо