【发布时间】:2019-07-22 18:37:57
【问题描述】:
我与 selenium 一起创建了一个 python 脚本来解析网页中的特定内容。我可以通过多种不同的方式获得位于QUOTE 下的AARONS INC 的结果,但我希望通过使用 pseudo selector 来抓取它,不幸的是 selenium 没有'支持。下面脚本中注释掉的行表示 selenium 不支持pseudo selector。
但是,当我在 driver.execute_script() 中使用 pseudo selector 时,我可以完美地解析它。为了完成这项工作,我必须使用硬编码延迟来使元素可用。现在,我希望在Explicit Wait 条件中包装这个driver.execute_script()。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
driver.get("https://www.nyse.com/quote/XNYS:AAN")
time.sleep(15)
# item = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span:contains('AARONS')")))
item = driver.execute_script('''return $('span:contains("AARONS")')[0];''')
print(item.text)
如何将driver.execute_script() 包装在显式等待条件中?
【问题讨论】:
-
这里的伪选择器是什么?为什么不能使用包含文本的 xpath?
-
这是
:contains()@supputuri。我没有说我不能使用 xpath 来实现这一点。但是,我的问题是关于在显式等待中包装driver.execute_script()。 -
我看到了其他选项来处理这个问题,但是我提供了满足您要求的答案。如果您有任何问题,请查看并告诉我。
标签: python python-3.x selenium selenium-webdriver web-scraping