我创建了一个使用硒的脚本来获取动态生成的文本。我要求使用硒,所以在这种情况下我不想去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)