Python 无法在“显式等待”条件内包装“驱动程序。执行_脚本()”
我与selenium一起创建了一个python脚本,用于解析网页中的特定内容。我可以通过许多不同的方式获得位于Python 无法在“显式等待”条件内包装“驱动程序。执行_脚本()”,python,python-3.x,selenium,selenium-webdriver,web-scraping,Python,Python 3.x,Selenium,Selenium Webdriver,Web Scraping,我与selenium一起创建了一个python脚本,用于解析网页中的特定内容。我可以通过许多不同的方式获得位于QUOTE下的AARONS INC结果,但我希望通过使用伪选择器来获取该结果,遗憾的是selenium不支持该方法。下面脚本中注释掉的行表示selenium不支持伪选择器 然而,当我在驱动程序中使用伪选择器时,执行
QUOTE
下的AARONS INC
结果,但我希望通过使用伪选择器来获取该结果,遗憾的是selenium不支持该方法。下面脚本中注释掉的行表示selenium不支持伪选择器
然而,当我在驱动程序中使用伪选择器时,执行
我就可以完美地解析它。为了实现这一点,我必须使用硬编码延迟,以使该元素能够飞行。现在,我希望对这个驱动程序进行同样的包装。在显式等待
条件内执行_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)
如何包装驱动程序。在显式等待条件下执行\u 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)
这是实现这一目标的方法之一。试试看
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)
这是一个简单的方法
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)
这是一个简单的方法
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)
您可以在浏览器脚本中执行while操作,这可能更安全:
item = driver.execute_async_script("""
var span, interval = setInterval(() => {
if(span = $('span:contains("AARONS")')[0]){
clearInterval(interval)
arguments[0](span)
}
}, 1000)
""")
您可以在浏览器脚本中执行while操作,这可能更安全:
item = driver.execute_async_script("""
var span, interval = setInterval(() => {
if(span = $('span:contains("AARONS")')[0]){
clearInterval(interval)
arguments[0](span)
}
}, 1000)
""")
这里的伪选择器是什么?为什么不能将xpath与包含文本一起使用?这是:contains()
@supputuri。我没有说我不能使用xpath来实现这一点。但是,我的问题是关于在显式等待中包装驱动程序。执行\u script()
。我看到了处理此问题的其他选项,但是我提供了满足您要求的答案。如果您有问题,请检查并告诉我。这里的伪选择器是什么?为什么不能将xpath与包含文本一起使用?这是:contains()
@supputuri。我没有说我不能使用xpath来实现这一点。但是,我的问题是关于在显式等待中包装驱动程序。执行\u script()
。我看到了处理此问题的其他选项,但是我提供了满足您要求的答案。如果您有问题,请检查并告诉我。这非常令人印象深刻@pguardiario。这种方法唯一和主要的问题是,如果选择器出现故障或元素不存在,脚本将永远运行。因此,超时选项是必要的,以使其完美无瑕@pguardiario。是的,如果元素不总是存在,只需增加一个计数器并返回false或其他什么。这是非常令人印象深刻的@pguardiario。这种方法的唯一和主要问题是,如果选择器出现故障或元素不存在,脚本将永远运行。因此,timeout选项对于使其完美无瑕是必要的@pguardiario.Yes,如果元素不总是存在,只需增加一个计数器并返回false或其他。不适用于:wait.until(lambda driver:driver.execute_script(“arguments[0].scrollTop=arguments[0].scrollHeight”,dep))
Any suggestion?不适用于:wait.until(lambda驱动程序:driver.execute_脚本(“参数[0]。scrollTop=arguments[0]。scrollHeight”,dep))
Any suggestion?