Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在驱动程序中使用伪选择器时,无法将某些元素滚动到视图中。执行_脚本()_Python_Python 3.x_Selenium_Web Scraping_Selenium Chromedriver - Fatal编程技术网

Python 在驱动程序中使用伪选择器时,无法将某些元素滚动到视图中。执行_脚本()

Python 在驱动程序中使用伪选择器时,无法将某些元素滚动到视图中。执行_脚本(),python,python-3.x,selenium,web-scraping,selenium-chromedriver,Python,Python 3.x,Selenium,Web Scraping,Selenium Chromedriver,我使用selenium创建了一个脚本来获取动态生成的文本。我需要使用硒元素,所以在这种情况下我不想使用xhr。我试图在selenium中使用伪选择器,在其中定义显式等待。由于selenium不支持伪选择器,正如在:contains()中一样,我使用javascript命令driver.execute_script()来达到这个目的 现在,我尝试的方式不一致,因为我想要抓取的文本不在视口中。如果在脚本运行时手动向下滚动一点,它就会工作。顺便说一下,Xpath在这里不是一个选项 在driver.ex

我使用selenium创建了一个脚本来获取动态生成的文本。我需要使用硒元素,所以在这种情况下我不想使用xhr。我试图在selenium中使用
伪选择器
,在其中定义
显式等待
。由于selenium不支持
伪选择器
,正如在
: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)

我看到的问题是
span
元素实际上并不包含文本
AARONS INC
,除非您检查该元素并尝试在devtools中展开
span
元素。当您在运行脚本时向下滚动一点时,问题就不再存在了。但问题是,我没有找到任何将元素引入视口的方法。不幸的是,我正在使用此网站进行本地测试,甚至在将
AARONS INC
滚动到视口后(通过滚动到
Quote
标题),
span
仍然不包含
AARONS INC
文本——我等待了15秒,但始终没有找到元素。请检查此项以清除任何混淆@Christine。我无法清楚地理解您想要做什么。我执行你的代码,没有手动滚动,它可以工作。谢谢你的回答@Guy。我的问题实际上是为了你的第二个答案。但是,它抛出此错误
raise exception_class(message,screen,stacktrace)selenium.common.exceptions.JavascriptException:message:javascript错误:无法读取未定义的属性“scrollIntoView”
。我将尝试在不同的情况下查看它的行为。谢谢。我想第一个答案不会有帮助,因为它在到达这一行之前会抛出错误
驱动程序。执行_脚本('arguments[0]。scrollIntoView();',item)
@MITHU第一个答案也会等待元素,只是不会滚动。如果您看到超时异常,可以在
WebDriverWait
中增加时间。