python-3.x - 如何在不使用 javascript 方法 execute_script() 的情况下在 Python 中使用 selenium webdriver 滚动网页
问题描述
我正在尝试使用鼠标和滚动条滚动网页。我正在探索除
"driver.execute_script("window.scrollBy(0, 5000'))"
我确实尝试了诸如 chrome 操作之类的选项,但似乎没有任何效果。如果有人知道如何解决这个问题,将需要一些指导。
解决方案
如果您的用例是包含 DOM 文档scroll()
的窗口,那么除了使用以下任一窗口方法之外,没有更好的方法:
如果您的用例是scroll()
一个元素,那么没有比使用元素方法更好的方法了:
您可以在不同滚动选项之间的区别是什么中找到详细讨论?
但是,如果您想避免execute_script()
与WebElement交互,您可以使用以下两 (2) 个其他选项:
使用selenium.webdriver.common.action_chains中的move_to_element()。此方法将自动滚动Viewport中的元素。
示例代码:
menu = driver.find_element_by_css_selector(".nav") hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1") ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
使用selenium.webdriver.support.expected_conditions中的element_to_be_clickable()。当与selenium.webdriver.support.wait结合使用时, expected_conditions将自动滚动Viewport中的元素。
示例代码:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Cart"))).click()
推荐阅读
- c++11 - 错误 C2679 二进制“<<”:未找到采用“T”类型右侧操作数的运算符(或没有可接受的转换)
- wpf - 使用 MVVM 模式时,WPF 组合框在视图中不可见
- r - 重新编码时间序列数据以为每个人创建时间 0
- python - 如何迭代一组张量并将每个组中的元素传递给一个函数?
- python - 使用 Scrapy 在管道内的 MYSQL 数据库中的 2 个表上添加项目
- angular - 如何在 Angular 7 中使用输入掩码 jQuery 插件?
- c++ - 为什么读取文件时会出现此异常,而存储文件时不会出现?
- typescript - 匹配字符串并使用打字稿返回匹配的字符串
- ruby-on-rails - 如何在rails中打印可以是JSON或非JSON的api响应?
- google-bigquery - 控制和监控 BI Engine Reservations 的使用