【问题标题】:Selenium PhantomJS Scrolling DownSelenium PhantomJS 向下滚动
【发布时间】:2017-11-06 21:52:32
【问题描述】:

我尝试使用 selenium 向下滚动,但我使用 webdriver PhantomJS。我尝试使用 selenium 来测试 javascript instagram。如您所知,instagram 上有“加载更多”按钮,点击“加载更多”按钮后,我们不必再次点击,因为它会自动刷新并显示更多图像。

我试过这样:

driver.find_element_by_xpath("//a[@class='_8ioip _glw1t']").click()
time.sleep(5)

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3.6)

实际上这段代码是有效的,但不是真的有效,我的意思是在“time.sleep”发生了一些奇怪的事情。如果我给2,结果很少,如果我给3,结果差不多,但是如果我给5,结果和我给2一样。

问题是,如何让 Scroll 获取所有数据

【问题讨论】:

    标签: python selenium scroll phantomjs


    【解决方案1】:

    “加载更多”按钮的类别似乎已更改。 你的代码是正确的,试试这个xpath:

    //a[@class='_8imhp _glz1g']
    

    或者尝试通过它的文本内容来定位按钮:

    //*/div/a[text()[contains(.,'Load more')]]
    

    在点击按钮之前向下滚动..所以你的代码应该是这样的:

    driver.get('https://www.instagram.com/explore/tags/whatever/')
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    driver.find_element_by_xpath("//*[text()[contains(.,'Load more')]]").click()
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    

    【讨论】:

    • 它可以工作,但是当我尝试循环播放它时,为什么它不起作用??你能帮我吗 ??我试过这样:''' while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") ''' 我把它放在点击按钮加载更多之后。
    • 每次滚动后,您必须计算帖子的总数。当计数器稳定后,您可以中断 while 循环,因为您将拥有所有帖子
    • 我做了,我得到了帖子的总数。我试图按帖子总数循环。我用它来显示帖子的总数。 ''' while True : driver.find_element_by_xpath("//span[@class='_s53mj']/span[@‌​class='_bkw5z']").te‌​xt.replace(',','') ''' 我试图通过它循环,但仍然出错。
    • 对不起,这不是错误,而是循环总是从顶部再次循环,即使所有数据都已获取,“while”仍在循环。
    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多