我已经创建了一个python脚本和selenium来解析网页中的特定内容。我可以通过许多不同的方式获得位于AARONS INC
下的QUOTE
结果,但我希望通过使用 pseudo selector
不幸的是,硒不支持。下面脚本中带注释的行表示硒不支持pseudo selector
。
但是,当我在pseudo selector
中使用driver.execute_script()
时,我可以完美地解析它。为了使这项工作有效,我必须对元素使用硬编码延迟。现在,我希望将driver.execute_script()
包装在Explicit Wait
条件下。
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()
?
答案 0 :(得分:2)
这是实现该目标的方法之一。试一试。
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)
答案 1 :(得分:2)
您可以在浏览器脚本中执行while操作,这可能更安全:
item = driver.execute_async_script("""
var span, interval = setInterval(() => {
if(span = $('span:contains("AARONS")')[0]){
clearInterval(interval)
arguments[0](span)
}
}, 1000)
""")
答案 2 :(得分:1)
这是简单的方法。
url = 'https://www.nyse.com/quote/XNYS:AAN'
driver.get(url)
# wait for the elment to be presented
ele = WebDriverWait(driver, 30).until(lambda driver: driver.execute_script('''return $('span:contains("AARONS")')[0];'''))
# print the text of the element
print (ele.text)