【问题标题】:Scrolling down a webpage using selenium chromedriver使用 selenium chromedriver 向下滚动网页
【发布时间】:2019-02-05 20:02:57
【问题描述】:

我正在尝试从一个站点检索所有相关的 URL,但是为了呈现它们,我必须向下滚动网页,否则它会返回 500 个 URL。

我有两个关键功能。 获取所有相关 URL 的方法:

from bs4 import BeautifulSoup

from selenium import webdriver 

def scrapeCategory(url):
    url1 = url + "?max=10000"
    html = getHtmlHeadless(url1)
    site = htmlParser(html)
    links = site.findAll('a', {'class':'itemImage', 'data-e2e':'product-listing'}, href=True)
    url_list = []
    for link in links:
        url_list.append("https://www.size.co.uk"+link['href'])
    return url_list

通过指定 max=10000,我确保所有列表都在一个页面上(而不是必须从一个页面跳转到另一个页面)。

url1 = url + "?max=10000"

还有一个使用无头 chromedriver 检索 HTML 的函数:

def getHtmlHeadless(url):
    user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36'
    options = webdriver.ChromeOptions()

    # specify headless mode
    options.add_argument('headless')

    # specify the desired user agent
    options.add_argument(f'user-agent={user_agent}')
    driver = webdriver.Chrome(executable_path='./chromedriver',options=options)

    # Ensure it is a string
    if ( type (url)!= str):
        print("The input must be a string or list of strings")
    driver.get(url)
#     driver.send_keys(Keys.PAGE_DOWN)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    html = driver.page_source
    return html

遵循我尝试应用的其他类似查询中给出的建议

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

driver.send_keys(Keys.PAGE_DOWN)

但是它似乎没有完成这项工作,因为我要么获得最多 500 个 URL,要么在后一种情况下我收到错误。

错误:

<AttributeError: 'WebDriver' object has no attribute 'send_keys'>

我怀疑我没有放置

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

在正确的位置。但是我不知道该放在哪里。

【问题讨论】:

  • 1.为了更好地理解选项 1(使用 javascript 执行程序)的问题,您可以分享url 的值吗? 2. 在选项 2 中,您正在调用 send_keys,这不是 WebDriver 的函数,而是 WebElement。 3. 这个网站是否使用延迟加载?如果没有,那么您不需要滚动到页面底部来获取页面源。
  • 这听起来像X-Y problem。与其寻求解决问题的帮助,不如编辑您的问题并询问实际问题。你想做什么?

标签: python-3.x selenium selenium-webdriver web-scraping


【解决方案1】:

'WebDriver' 对象没有属性'send_keys'

send_keys()WebElement 类的方法,而不是 WebDriver

【讨论】:

    【解决方案2】:

    我知道这是旧的。如果有人仍在寻找通过 Selenium 执行滚动页面而无需发送密钥的方法。

    last_height = driver.execute_script("return document.body.scrollHeight")
    
    while True:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight*0.90);")
    
        time.sleep(SCROLL_PAUSE_TIME)
    
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      相关资源
      最近更新 更多