【问题标题】:grabbing dynamic element in a table using python selenium使用 python selenium 抓取表格中的动态元素
【发布时间】:2021-09-16 20:41:49
【问题描述】:

我要抓取的链接是https://hcad.org/property-search/real-property/real-property-search-by-account-number/

我目前正在使用这种方法

driver.get('https://hcad.org/property-search/real-property/real-property-search-by-account-number/')

driver.implicitly_wait(2)        
driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/h1').click()

actions.send_keys(Keys.TAB * 2 )
actions.send_keys(account_num)
actions.send_keys(Keys.TAB)
actions.send_keys(Keys.RETURN)
    
actions.perform()

在搜索框中输入帐号并搜索它,这给了我一个新表格。
我尝试使用完整的 xpath 来查找输入区域,但它始终无法正常工作。
无论如何我可以使用元素 xpath 编写帐户编号,或者我可以超出操作方法以外的表单元素。
我尝试了不同的方法。
就像使用驱动程序隐式等待功能使用(id,full xpath)搜索输入区域但它们都不起作用请在这里帮助我,以便我可以使用您的方法在输入帐号后获取的表单上获取元素我迷路了。

【问题讨论】:

    标签: python selenium xpath iframe css-selectors


    【解决方案1】:

    您使用了错误的定位器。
    另外,我不明白你为什么使用 Actions 而不是 Selenium.send_keys()? 我会这样做:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.keys import Keys
    
    wait = WebDriverWait(driver, 20)
    
    driver.get('https://hcad.org/property-search/real-property/real-property-search-by-account-number/')
    
    wait.until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath("//iframe")))
    
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'input[name="searchval"]'))).send_keys(account_num)
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'input[type="submit"]'))).click()
    

    【讨论】:

    • 感谢您回答问题 您能在输入字段中输入随机帐号吗?因为它向我展示 selenium.common.exceptions.TimeoutException: Message: error
    • @AliUmer 这里有一个 iframe。您首先需要切换到它。查看更新的代码
    【解决方案2】:

    搜索字段在 iframe 中,您需要切换驱动焦点:

    代码:

    driver.maximize_window()
    wait = WebDriverWait(driver, 10)
    driver.get('https://hcad.org/property-search/real-property/real-property-search-by-account-number/')
    wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[src='https://public.hcad.org/records/Real.asp']")))
    driver.find_element_by_id('acct').send_keys("12345")
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input[value='Search']"))).click()
    

    进口:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

    【讨论】:

    • 感谢 iframe。终于成功了
    猜你喜欢
    • 2020-06-21
    • 2021-06-25
    • 2023-01-25
    • 2022-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多