使用elem.send“手柄用U键”;“无限卷轴”;在第页。在Python中使用Selenium PhantomJS
我需要在一个“无限滚动”网页中获取xpath标识的元素,如。 问题是,当我将Selenium与webdriver PhantomJS一起使用时,只需要一些链接,即加载页面后加载的第一个链接。 我尝试增加time.sleep()或在代码中插入更多,但不起作用。如果我像使用webdriver一样使用Firefox,它会工作得很好 有可能解决这个问题并改进我的代码吗? 可能不使用时间事件,但查看一些可以判断是否进入页面的内容 谢谢和问候使用elem.send“手柄用U键”;“无限卷轴”;在第页。在Python中使用Selenium PhantomJS,python,selenium,web-scraping,phantomjs,infinite-scroll,Python,Selenium,Web Scraping,Phantomjs,Infinite Scroll,我需要在一个“无限滚动”网页中获取xpath标识的元素,如。 问题是,当我将Selenium与webdriver PhantomJS一起使用时,只需要一些链接,即加载页面后加载的第一个链接。 我尝试增加time.sleep()或在代码中插入更多,但不起作用。如果我像使用webdriver一样使用Firefox,它会工作得很好 有可能解决这个问题并改进我的代码吗? 可能不使用时间事件,但查看一些可以判断是否进入页面的内容 谢谢和问候 import re import mechanize from
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()
我修改代码如下:
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_脚本(“window.scrollTo(0,document.body.scrollHeight);”)
我尝试用浏览器代替send_键,在while中替换elem.send_键(key.PAGE_DOWN)time.sleep(0.02),执行_脚本(“window.scrollTo(0,document.body.scrollHeight)),并将time sleep设置为0.2,因为PhantomJs加载页面的速度比firefox快。这个解决方案也适用于phantomjs。但我仍然为这种方法的“优雅”而感到自豪。我在等待一些比较或更好的代码示例。