【问题标题】:Web Scraping through Selenium通过 Selenium 进行网页抓取
【发布时间】:2016-01-17 23:11:39
【问题描述】:

我正在使用 selenium、python 和 javascript 从以下链接中提取数据:

https://www.google.co.in/search?q=Fortis+Escorts+Heart+Institute+%26+Research+Centre,+Okhla+Road,+Opp+Holy+Family+Hospital,+New+Friends+Colony,+New+Delhi,+Delhi+110025&ludocid=8685206163378021720#lrd=0x390ce4759f47e68d:0x78880cfd492e2558,1

当我执行以下脚本时,主窗口会滚动,而不是弹出窗口(一个 ajax 窗口)。

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

我想滚动弹出窗口而不是主窗口。 任何帮助表示赞赏。

为了在主浏览器窗口中退出循环,我使用以下逻辑:

while (num_clicks>=0 and end_doc==0):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)
    num_clicks = num_clicks-1
    x = driver.execute_script("return pageYOffset")
    if x==y:
        end_doc = 1
    y = x

有没有办法使用类似的逻辑退出子窗口。

【问题讨论】:

  • 我在退出循环时面临挑战。在一个类似的站点上,但使用主窗口而不是弹出窗口,我将滚动的位置(使用 pageYOffset)与滚动后的滚动位置进行比较。如果它们相同,我退出循环。但是在弹出窗口的情况下,似乎没有办法获取 pageYOffset (为主窗口提供结果)。我必须使用一种解决方法来完成这项工作但效率不高。

标签: javascript python ajax selenium


【解决方案1】:

Scroll into view列表中最后一条评论,重复:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.google.co.in/search?q=Fortis+Escorts+Heart+Institute+%26+Research+Centre,+Okhla+Road,+Opp+Holy+Family+Hospital,+New+Friends+Colony,+New+Delhi,+Delhi+110025&ludocid=8685206163378021720#lrd=0x390ce4759f47e68d:0x78880cfd492e2558,1")

while True:  # TODO: decide on when to stop the loop
    reviews = driver.find_elements_by_css_selector("._ju")
    driver.execute_script("arguments[0].scrollIntoView();", reviews[-1])

代码对我有用,但我留给你决定无限循环退出条件。

【讨论】:

  • 效果很好。非常感谢!!
  • 我在退出循环时面临挑战。在一个类似的站点上,但使用主窗口而不是弹出窗口,我将滚动的位置(使用 pageYOffset)与滚动后的滚动位置进行比较。如果它们相同,我退出循环。但是在弹出窗口的情况下,似乎没有办法获取 pageYOffset (为主窗口提供结果)。我必须使用一种解决方法来完成这项工作但效率不高。
  • @AmitAgarwal 好的,您能否创建一个单独的问题并提供必要的详细信息?谢谢你。请在此处提供链接。
  • @alexce。无法发布问题。达到极限。我在主要问题中发布代码,用于在主浏览器窗口中退出循环。
猜你喜欢
  • 2018-11-05
  • 2020-11-09
  • 1970-01-01
  • 2013-08-27
  • 2021-01-19
  • 1970-01-01
  • 2019-04-06
  • 2019-06-23
相关资源
最近更新 更多