python - 滚动到 Selenium (Python) 中的下一个元素
问题描述
我正在尝试在 Python 中的 Selenium 中制作一个 facebook 评论机器人。我需要向下滚动到在评论中上传照片的按钮才能发表评论,我有这行代码:
ActionChains(driver).move_to_element(driver.find_element_by_id('my-id')).perform()
当我再次运行它时,它会滚动到同一个按钮,我需要滚动到下一个按钮。还有另一个问题:这个按钮没有id。有什么办法吗?
解决方案
因此,为了滚动到多个元素,您需要使用该driver.execute_script()
方法。如果您有驱动程序并且打开了页面,则需要隔离要导航到的元素。
element = driver.find_element(By.XPATH, "Whatever xpath you want")
driver.execute_script("return arguments[0].scrollIntoView();", element)
一旦你有了这个,你将需要计算你想要滚动的所有元素。例如,在Top 100 Greatest Movies List网站中,我创建了一个方法来获取当前显示的电影数量
def get_movie_count(self):
return self.driver.find_elements(By.XPATH, "//div[@class='lister-list']//div[contains(@class, 'mode-detail')]").__len__()
之后,我创建了另一种滚动到我的元素的方法
def scroll_to_element(self, xpath : str):
element = self.driver.find_element(By.XPATH, xpath)
self.driver.execute_script("return arguments[0].scrollIntoView();", element)
完成后,我创建了一个for-loop
并滚动到每个元素
for row in range(movieCount):
driver.scroll_to_element("//div[@class='lister-list']//div[contains(@class, 'mode-detail')][{0}]".format(row + 1))
照片说明
在这张照片中,我们有我们的WebDriver
班级。这是创建我们的 Chrome WebDriver 并包含我们想要的任何选项的类。就我而言,我不想一直看到“这由自动化控制”警报。
在WebDriver
课堂上,我有一个名为的方法,wait_displayed
它使用. 如果该元素存在于浏览器的中,则一切正常。否则,会引发一个并让我知道找不到我的元素。在这个类中,我包含了允许我的 chrome 驱动程序在页面上查找元素并执行代码以滚动到找到的元素的方法。selenium
DOM
xpath
DOM
python
Exception
selenium
scroll_to_element
JavaScript
在SampleSite
类中,我们继承WebDriver
类。这意味着我的SampleSite
班级可以使用班级中显示的方法WebDriver
。(like wait_displayed
and scroll_to_element
) 在SampleSite
课堂上,我提供了一个optional parameter
in it 的constructor
方法。( __init__()
) 这个可选参数告诉程序员,如果他们想创建一个instance
或object
类SampleSite
,他们需要,或者,传入一个现有的 chrome 驱动程序;或者,通过课程将打开 Google ChromeNone
并SampleSite
导航到我们的 100 部最伟大的电影页面。这是我创建def get_movie_count(self):
方法的类。
在我们的main_program.py
文件中,我导入了我们的SampleSite
类。导入后,我创建了我们类的一个实例并调用了该get_movie_count
方法。一旦该方法返回了我的电影计数 ( 100 ),我创建了一个for-loop
滚动浏览每个元素的方法。
推荐阅读
- python - 即使列仅包含整数,熊猫也总是将列转换为对象
- javascript - 是否有可能只执行一次功能?
- indy - Indy idHTTP 出错后继续执行
- unix - 简单的字数计算 rust 程序输出有效的标准输出,但当通过管道传输到具有特定内容的头部程序时会出现恐慌
- javascript - JS 与 JSON 一起工作 - 我使用括号错了吗?
- java - I can get the data from another application of the same topic
- swift - Loop 中的 Swift 计时器全部同时触发,而不是按顺序触发
- regex - 使用 RegEx 将长列解析为多行?
- c - sizeof 指向结构惊喜的指针
- javascript - 在 React 中更改一种状态时,两种状态都发生了变化