【问题标题】:Scroll a specific part of a website with selenium.使用 selenium 滚动网站的特定部分。
【发布时间】:2017-12-15 21:29:45
【问题描述】:

我正在尝试创建一个用于滚动此站点的脚本:http://m.1688.com/offer/39202959720.html?spm=a26g8.7664812.0.0.dfxn8I

正如您在网站上看到的,如果光标放在主空间内,它将能够滚动,而如果它在主空间之外则不会。我创建了一个脚本,我想用它来滚动网站:

driver = webdriver.Chrome('C:\Users\V\Desktop\PY\web_scrape\chromedriver.exe')
driver.get('http://m.1688.com/offer/39202959720.html?spm=a26g8.7664812.0.0.dfxn8I')
displayed = False
for i in range(5):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

假设所有相关的包都被导入,当脚本运行时,selenium 似乎没有滚动站点,我想知道我能做些什么来解决这个问题。也许有一些方法可以告诉 selenium 将光标放在特定部分。

【问题讨论】:

    标签: python selenium web-scraping beautifulsoup


    【解决方案1】:

    尝试使用以下代码向下滚动内容:

    from selenium.webdriver.common.keys import Keys
    
    driver.get('http://m.1688.com/offer/39202959720.html?spm=a26g8.7664812.0.0.dfxn8I')
    
    # Click on element inside the main content to switch focus
    driver.find_element_by_xpath('//h1[@class="d-title"]').click()
    
    for i in range(5):
        # Scroll page down
        driver.find_element_by_tag_name('body').send_keys(Keys.END)
        time.sleep(2)
    

    【讨论】:

    • 有什么办法让它滚动一点点而不是一直滚动到最后,因为当我实现代码时,它不会打印出一些元素。
    • 要往下走,您可以将原始 javascript 更改为:driver.execute_script("window.scrollBy(0,window.innerHeight * 0.9);") 并将 0.9 更改为您想要向下滚动的屏幕的任何部分。
    • @V.Anh,您可以将driver.find_element_by_tag_name('body').send_keys(Keys.END) 替换为driver.find_element_by_tag_name('body').send_keys(Keys.DOWN) 并多次使用它来制作小卷轴
    • @Andersson 它有效,但我不明白为什么我必须在打开 Chrome 实例以获取所有元素时直接查看网页,而当我使用 PhantomJS 时,它不会返回相同结果为 Chromedriver。
    • @V.Anh PhantomJS 是一个非常具体的工具,它在处理 XHR 时的行为略有不同。我建议您仅在非常需要的情况下使用PhantomJS
    猜你喜欢
    • 1970-01-01
    • 2023-01-23
    • 2018-09-20
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多