Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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 在selenium中使用Click()时,页面中的动态元素(表)没有更新,因此我无法';不要检索新数据_Python_Selenium_Web Scraping - Fatal编程技术网

Python 在selenium中使用Click()时,页面中的动态元素(表)没有更新,因此我无法';不要检索新数据

Python 在selenium中使用Click()时,页面中的动态元素(表)没有更新,因此我无法';不要检索新数据,python,selenium,web-scraping,Python,Selenium,Web Scraping,我需要从中提取数据的页面: 问题 每个表中只允许显示100行,因此我必须使用。 如下面的代码所示,我实际上是这样做的,但是每次单击actionActionChains(驱动程序)。单击(元素)。执行()时,都会检索第一个表的结果,而不会转到下一个表的结果 请记住,没有打开新页面,单击将被某种JavaScript截获,在同一页面上执行一些丰富的UI操作,以加载新的数据表 我的期望 我只是想验证我是否可以移动到下一个表,然后我将编辑代码以循环遍历所有表。 这段代码应该从results返回第二个表中的

我需要从中提取数据的页面

问题
每个表中只允许显示100行,因此我必须使用。 如下面的代码所示,我实际上是这样做的,但是每次单击action
ActionChains(驱动程序)。单击(元素)。执行()

时,都会检索第一个表的结果,而不会转到下一个表的结果 请记住,没有打开新页面,单击将被某种JavaScript截获,在同一页面上执行一些丰富的UI操作,以加载新的数据表

我的期望
我只是想验证我是否可以移动到下一个表,然后我将编辑代码以循环遍历所有表。 这段代码应该从results返回第二个表中的数据,但实际上它从最初加载URL的第一个表返回值。这意味着单击操作没有发生或实际上发生了,但是没有通过与页面中的动态JavaScript元素交互来更新WebDriver
驱动程序
内容

谢谢你的帮助

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import presence_of_element_located
from selenium.webdriver import ActionChains
import time
import sys


url = "https://www.digikey.com/en/products/filter/coaxial-connectors-rf-terminators/382?s=N4IgrCBcoA5QjAGhDOl4AYMF9tA"

chrome_driver_path = "..PATH\\chromedriver"
chrome_options = Options() 
chrome_options.add_argument ("--headless") 

webdriver = webdriver.Chrome(
    executable_path= chrome_driver_path
    ,options= chrome_options 
)


with webdriver as driver:
    wait = WebDriverWait(driver, 10)
    driver.get(url)
    wait.until(presence_of_element_located((By.CSS_SELECTOR, "tbody")))
    
    element = driver.find_element_by_css_selector("button[data-testid='btn-next-page']")
    ActionChains(driver).click(element).perform()
    time.sleep(10) #too much time i know, but to make sure it is not a waiting issue. something needs to be updated

    results = driver.find_elements_by_css_selector("tbody")

    for count in results:
        countArr = count.text
        print(countArr)
        print()
    
    driver.close()

终于找到了解决方案

解决方案的名称。
正如所料,问题在于单击操作本身。不知何故,它没有做对,或者根本没有做,如解决问题中所示

解决方案是使用Javascript执行单击按钮。
换行30
ActionChains(驱动程序)。单击(元素)。执行()
具体如下:

driver.execute_script("arguments[0].click();",element)

就这样。

我知道你已经回答了你的问题,但让我提出一个更简单的替代方案。
element.click()
有效吗?不,我以前尝试过。我还尝试了python中的每一段代码,以不同的方式创建单击操作,但只有这个Javascript执行方法对我有效。可能是因为我的网站运行了大量javascript内容。谢谢你的回答。我将来一定会用的,不客气