使用 python selenium 在 table 中抓取动态元素

grabbing dynamic element in a table using python selenium

我要抓取的 link 是 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 编写帐户编号,或者我可以超出 actions 方法以外的表单元素。
我尝试了不同的方法。
就像使用驱动隐式等待函数使用 (id,full xpath) 搜索输入区域但是 none 它们工作请在这里帮助我这样我可以使用你的方法在我输入帐号后得到的表单上获取元素我是迷路了。

您使用了错误的定位器。
另外,我不明白你为什么使用 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()

搜索字段在 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