Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用elem.send“手柄用U键”;“无限卷轴”;在第页。在Python中使用Selenium PhantomJS_Python_Selenium_Web Scraping_Phantomjs_Infinite Scroll - Fatal编程技术网

使用elem.send“手柄用U键”;“无限卷轴”;在第页。在Python中使用Selenium PhantomJS

使用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

我需要在一个“无限滚动”网页中获取xpath标识的元素,如。 问题是,当我将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_脚本(“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。但我仍然为这种方法的“优雅”而感到自豪。我在等待一些比较或更好的代码示例。