python-3.x - 使用 selenium chromedriver 向下滚动网页
问题描述
我正在尝试从站点中检索所有相关的 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,我确保所有列表都在 1 页上(而不是必须从一页跳到另一页)。
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);")
在正确的地方。但是我不知道在哪里可以放置它。
解决方案
“WebDriver”对象没有属性“send_keys”
send_keys()
是WebElement
类上的方法,而不是WebDriver
.
推荐阅读
- laravel - Laravel vue下载的PDF文件未加载
- c++ - return (int32_t& 1u) ^ 1u 是什么意思?
- pine-script - 如何绘制较高时间范围的最高价格并在较低时间范围图表上查看
- python-asyncio - Pytest 一个调用异步协程的函数
- ubuntu-16.04 - 关于 ethtool 收发器的类型,“外部”和“内部”有什么区别?
- javascript - chartjs中图表区域的背景颜色不起作用
- c# - 检测非公历日期格式
- scenebuilder - SceneBuilder 16 中的资源(捆绑包)
- c# - 如何比较两个 DataTable 并使用多个线程更新第一个 DataTable?
- vuejs2 - 默认情况下,使用 v-model 选中复选框