在 driver.execute_script() 中使用伪选择器时无法将某些元素滚动到视图中



我创建了一个使用硒的脚本来获取动态生成的文本。我要求使用硒,所以在这种情况下我不想去xhr。我正在尝试使用硒中的pseudo selector来定义其中的explicit wait。由于硒不支持pseudo selector,就像在:contains()中一样,我使用了javascript命令driver.execute_script()来达到目的。

现在,我尝试的方式不一致,因为我要抓取的文本不在视口内。如果我在脚本运行时手动向下滚动一点,它可以工作。顺便说一下,Xpath在这里不是一个选项。

如何在 driver.execute_script(( 中使用伪选择器时将元素滚动到视图中?

我已经尝试过[工作不一致]:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
with webdriver.Chrome() as driver:
wait = WebDriverWait(driver, 10)
driver.get('https://www.nyse.com/quote/XNYS:AAN')
item = wait.until(
lambda driver: driver.execute_script('''return $('span:contains("AARONS")')[0];''')
)
print(item.text)

预期成果:

AARONS INC

PS 在将此帖子标记为重复之前,请确保您至少阅读了问题的标题。

您可以使用返回的WebElement执行另一个 JavaScript 命令

item = wait.until(
lambda d: d.execute_script('''return $('span:contains("AARONS")')[0];''')
)
driver.execute_script('arguments[0].scrollIntoView();', item)

或在单个脚本中

item = wait.until(
lambda d: d.execute_script(
'''var el = $('span:contains("AARONS")')[0];
if (typeof el !== "undefined") {
el.scrollIntoView();
}
return el;''')
)

这将等到元素存在并将其滚动到视图中。

您也可以通过识别 CSS 元素来尝试

使用 CSS 参数创建一个通用方法,并且可以重用它

script = "document.querySelector('#{css_selector}').scrollIntoView(true);"
driver.execute_script(script)

相关内容

  • 没有找到相关文章

最新更新