gpt4 book ai didi

python - 将 elem.send_keys 用于页面中的句柄 "Infinite Scroll"。在 Python 中使用 Selenium PhantomJS

转载 作者:行者123 更新时间:2023-11-28 19:16:36 25 4
gpt4 key购买 nike

我需要在“无限滚动”网页中获取由 xpath 标识的元素,如 this .问题是,当我将 Selenium 与 webdriver PhantomJS 一起使用时,它只需要一些链接,第一个链接是在页面加载后加载的。我尝试增加 time.sleep() 或在代码中插入更多但不起作用。如果我像使用 webdriver 一样使用 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()

最佳答案

我这样修改了我的代码:

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

关于python - 将 elem.send_keys 用于页面中的句柄 "Infinite Scroll"。在 Python 中使用 Selenium PhantomJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32876282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com