MIT*_*THU 3 python selenium web-scraping python-3.x selenium-chromedriver
我已经使用 selenium 创建了一个脚本来获取动态生成的文本。我要求使用 selenium,所以在这种情况下我不想使用 xhr。我正在尝试pseudo selector在其中定义硒中使用explicit wait。由于 selenium 不支持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)
Run Code Online (Sandbox Code Playgroud)
预期结果:
AARONS INC
Run Code Online (Sandbox Code Playgroud)
PS 在将此帖子标记为重复之前,请确保您至少阅读了问题的标题。
您可以使用返回WebElement来执行另一个 JavaScript 命令
item = wait.until(
lambda d: d.execute_script('''return $('span:contains("AARONS")')[0];''')
)
driver.execute_script('arguments[0].scrollIntoView();', item)
Run Code Online (Sandbox Code Playgroud)
或者在单个脚本中
item = wait.until(
lambda d: d.execute_script(
'''var el = $('span:contains("AARONS")')[0];
if (typeof el !== "undefined") {
el.scrollIntoView();
}
return el;''')
)
Run Code Online (Sandbox Code Playgroud)
这将等到元素存在并将其滚动到视图中。
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |