Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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_Selenium Webdriver_Web Scraping - Fatal编程技术网

Python 我的脚本无法单击某个网格

Python 我的脚本无法单击某个网格,python,python-3.x,selenium,selenium-webdriver,web-scraping,Python,Python 3.x,Selenium,Selenium Webdriver,Web Scraping,我已经用python结合selenium编写了一个脚本,以从网页中获取一些信息。要获得内容,需要跨越几个步骤,如在接受条件中,填写输入框,点击搜索按钮来填充结果,最后点击填充表中的第一个网格(更具体地说是第一个tr)。在第一个tr上启动任何单击后,一个新页面(包含所需信息)将打开 我的脚本可以成功地完成前三个步骤。我不能做的是: 单击第一个tr 聚焦到新打开的选项卡(包含我想要的信息) 要访问内容: 这是接下来的事情。首先单击“接受”按钮。然后有一个输入框名称,要用HMC设计组填写。现在,按下搜

我已经用python结合selenium编写了一个脚本,以从网页中获取一些信息。要获得内容,需要跨越几个步骤,如在接受条件中,
填写输入框,
点击搜索按钮来填充结果,最后点击填充表中的第一个网格(更具体地说是第一个tr)。在
第一个tr上启动任何单击后,一个新页面(包含所需信息)将打开

我的脚本可以成功地完成前三个步骤。我不能做的是:

  • 单击第一个tr
  • 聚焦到新打开的选项卡
    (包含我想要的信息)
  • 要访问内容:

    这是接下来的事情。首先单击“接受”按钮。然后有一个输入框
    名称
    ,要用
    HMC设计组
    填写。现在,按下搜索按钮,结果应该显示在下面的表格中。从那里我需要点击第一个tr

    这就是我迄今为止所尝试的:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
     
    link = "https://officialrecords.broward.org/AcclaimWeb/search/SearchTypeName"
    
    def get_information(driver,url):
        driver.get(url)
        wait.until(EC.element_to_be_clickable((By.ID, "btnButton"))).click()
        wait.until(EC.presence_of_element_located((By.ID,"SearchOnName"))).send_keys("HMC DESIGN GROUP")
        wait.until(EC.presence_of_element_located((By.ID, "btnSearch"))).click()
        wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,".t-grid-content table tr"))).click()
    
    if __name__ == "__main__":
        driver = webdriver.Chrome()
        wait = WebDriverWait(driver,10)
        try:
            get_information(driver,link)
        finally:
            driver.quit()
    

    当前,脚本既没有单击网格
    新生成表的第一个tr,也没有抛出任何错误。它优雅地退出浏览器。

    只需更换此css选择器即可:

    .t-grid-content table tr 
    

    .t-grid-content table tr.t-state-selected:first-child  
    
    用于单击第一个tr

    在单击第一个tr之前,将窗口句柄存储为:

    window_before = driver.window_handles[0]  
    
    单击第一个tr后,将新打开窗口的窗口句柄存储为:

    window_after = driver.window_handles[1]  
    
    现在,您只需将web驱动程序的焦点切换到新打开的窗口。如下所示:

    driver.switch_to_window(window_after)
    

    div
    下还有另一个
    ,它具有相同的类名
    “t-grid-content”
    。它显示为“正在加载…”
    。因此,在您提交搜索后,您确实可以使用选择器“
    ”.t-grid-content table tr“
    ”单击节点,但这并没有产生适当的效果

    您只需要更具体的选择器

    例如,试试看

    wait.until(EC.element_to_be_clickable((By.XPATH, "//td[contains(., 'HMC DESIGN GROUP')]")))
    
    若要切换到新窗口,请尝试将函数体更新为

    driver.get(url)
    current = driver.current_window_handle
    wait.until(EC.element_to_be_clickable((By.ID, "btnButton"))).click()
    wait.until(EC.presence_of_element_located((By.ID,"SearchOnName"))).send_keys("HMC DESIGN GROUP")
    wait.until(EC.presence_of_element_located((By.ID, "btnSearch"))).click()
    wait.until(EC.element_to_be_clickable((By.XPATH, "//td[contains(., 'HMC DESIGN GROUP')]"))).click()
    driver.switch_to.window([window for window in driver.window_handles if window != current][0])
    

    像魔术一样工作,先生。我在我的帖子里还有一个问题:如何切换到新打开的标签?非常感谢。@Andersson:正如OP所说的,他想点击第一个tr,所以点击tr的中间部分会很有意义,我们可以给他css选择器而不是xpath。@cruisepandey,我不确定我是否理解你的意思
    “//td[包含(,'HMC DESIGN GROUP')]”“
    从第一个
    tr
    返回表单元格。这很好。但您正在搜索的名称列中查找元素,对吗?我要说的是查找完整的tr,然后单击它的中间部分(默认的单击将在中间部分执行)。所以在我看来,给他一整排tr是很有意义的。完成新页面上的所有必需操作后,使用
    driver.close()
    关闭新窗口,并使用
    driver.switch\u to.default\u content()
    返回主屏幕。我尝试了(多次)使用选择器,但无法启动单击。正如您已经知道的,当成功执行单击时,将打开一个新选项卡。