使用elem.send_keys进行句柄" Infinite Scroll"在页面中。在Python中使用Selenium PhantomJS

时间:2015-09-30 21:57:17

标签: python selenium web-scraping phantomjs infinite-scroll

我需要在" 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()

1 个答案:

答案 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