我需要在" Infinite Scroll"中采用xpath标识的元素。像this这样的网页。 问题是当我使用Selenium和webdriver PhantomJS时它只需要一些链接,加载页面后加载的第一个链接。 我尝试增加 time.sleep()或在代码中插入更多但不起作用。如果我像使用网络驱动程序一样使用Firefox,那么效果很好。
有可能解决这个问题并改进我的代码吗? 也许不是使用时间事件,而是查找可以判断是否在页面上显示的内容。
谢谢和问候
import re
import mechanize
from pydblite import Base
from selenium import webdriver
import platform
import codecs
import scrapy
import time
from selenium.webdriver.common.keys import Keys
class getFrom(object):
def scrapying(self):
print platform.system()
#browser = webdriver.Firefox()
browser = webdriver.PhantomJS(executable_path='/usr/local/bin/node_modules/phantomjs/lib/phantom/bin/phantomjs')
browser.get("https://medium.com/top-100/december-2013")
time.sleep(5)
elem = browser.find_element_by_tag_name("body")
no_of_pagedowns = 200
while no_of_pagedowns:
elem.send_keys(Keys.PAGE_DOWN)
time.sleep(0.02)
no_of_pagedowns-=1
#Qui ci dovrebbe essere lo spider
post_elems = browser.find_elements_by_class_name("graf--h2")
#Fine Spider
for post in post_elems:
print post.text
browser.quit()
myClassObject = getFrom()
myClassObject.scrapying()
答案 0 :(得分:0)
我修改了我的代码:
import re
import mechanize
from pydblite import Base
from selenium import webdriver
import platform
import codecs
import scrapy
import time
from selenium.webdriver.common.keys import Keys
class getFrom(object):
def scrapying(self):
print platform.system()
if platform.system()=="Windows":
browser = webdriver.Firefox()
else:
#browser = webdriver.Firefox()
browser = webdriver.PhantomJS(executable_path='/usr/local/bin/node_modules/phantomjs/lib/phantom/bin/phantomjs')
browser.get("https://medium.com/top-100/december-2013")
time.sleep(5)
elem = browser.find_element_by_tag_name("body")
mins = raw_input("For how many minutes you want to scrapy the links? ")
print "start: "+ time.asctime( time.localtime(time.time()) )
timeout = time.time() + 60* int(mins) # 5 minutes from now
while True:
test = 0
elem.send_keys(Keys.PAGE_DOWN)
time.sleep(0.5)
if test == 5 or time.time() > timeout:
print "end: "+ time.asctime( time.localtime(time.time()) )
break
test = test - 1
#Qui ci dovrebbe essere lo spider
post_elems = browser.find_elements_by_class_name("graf--h2")
#Fine Spider
for post in post_elems:
print post.text
browser.quit()
myClassObject = getFrom()
myClassObject.scrapying()
现在工作正常。 我删除for循环添加一个时间控件来处理获得少量结果或很多结果的可能性。 但必须重要的是使用这个javascript函数: browser.execute_script(“window.scrollTo(0,document.body.scrollHeight);”)
而不是send_keys