如何使用Selenium和Python在网页中单击按钮A到Zhttp://architects-register.org.uk/list/regions

如何使用Selenium和Python在网页中单击按钮A到Zhttp://architects-register.org.uk/list/regions,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,所以我有这个网站,我想让代码点击按钮A,然后B和C等等。我该怎么做呢。我尝试了这段代码,它试图获取元素子元素的值,然后相应地单击按钮,但它不起作用。除了下面的错误之外,我怀疑还有其他一些问题 from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChai

所以我有这个网站,我想让代码点击按钮A,然后B和C等等。我该怎么做呢。我尝试了这段代码,它试图获取元素子元素的值,然后相应地单击按钮,但它不起作用。除了下面的错误之外,我怀疑还有其他一些问题

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()

url = 'http://architects-register.org.uk/'
driver.get(url)

find_uk = driver.find_element_by_id('ctl00_hlCountiesT').click()

elements = alphabets[0].find_element_by_tag_name('li')

def getChild(el):
   return el.children[0].children[0]

for element in elements:
    element = element[elements]
    (getChild(element)).click()

name错误:名称“alphabets”未定义

字母表
未导入或定义在给定代码块中的任何位置,因此尝试访问其索引将以所示方式失败。它看起来像是
字母表
可能是调用
按标签名查找元素
按类名查找元素
的结果,这将返回一个按钮列表,然后您可以重复并单击该列表。

字母表
未在给定代码块中的任何位置导入或定义,因此,尝试访问其上的索引将以所示方式失败。它看起来像是
alphabets
可能是调用
find_elements_by_tag_name
find_elements_by_class_name
的结果,这将返回一个按钮列表,然后您可以重复并单击该列表。

归纳
WebDriverWait
所有元素的可见性
()然后单击每个链接

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 import webdriver

driver = webdriver.Firefox()
url = 'http://architects-register.org.uk/'
driver.get(url)
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID,"ctl00_hlCountiesT"))).click()
elements =WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.XPATH,"//div[@class='alphabet_list_content']//li//input")))
for ele in range(len(elements)):
    elements = WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='alphabet_list_content']//li//input")))
    elements[ele].click()

导入位于的所有元素的
WebDriverWait
可见性(),然后单击每个链接

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 import webdriver

driver = webdriver.Firefox()
url = 'http://architects-register.org.uk/'
driver.get(url)
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID,"ctl00_hlCountiesT"))).click()
elements =WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.XPATH,"//div[@class='alphabet_list_content']//li//input")))
for ele in range(len(elements)):
    elements = WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='alphabet_list_content']//li//input")))
    elements[ele].click()

要单击按钮A,然后单击按钮BC等等,您必须使
元素的WebDriverWait可单击()
,并且您可以使用以下任一选项:

  • 使用
    CSS\u选择器

    driver.get("http://architects-register.org.uk/list/regions")
    for i in range(1, len(WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.alphabet_list_content>ul li"))))):
        WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.alphabet_list_content>ul li:nth-of-type({})>a>input".format(i)))).click()
    driver.quit()   
    
  • 使用
    XPATH

    driver.get("http://architects-register.org.uk/list/regions")
    for i in range(1, len(WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='alphabet_list_content']/ul//li"))))):
        WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='alphabet_list_content']/ul//following-sibling::li[{}]/a/input".format(i)))).click()
    driver.quit()   
    
  • 注意:您必须添加以下导入:

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

要单击按钮A,然后单击按钮BC,依此类推,您必须引导WebDriverWait使
元素可单击()
,并且您可以使用以下任一选项:

  • 使用
    CSS\u选择器

    driver.get("http://architects-register.org.uk/list/regions")
    for i in range(1, len(WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.alphabet_list_content>ul li"))))):
        WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.alphabet_list_content>ul li:nth-of-type({})>a>input".format(i)))).click()
    driver.quit()   
    
  • 使用
    XPATH

    driver.get("http://architects-register.org.uk/list/regions")
    for i in range(1, len(WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='alphabet_list_content']/ul//li"))))):
        WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='alphabet_list_content']/ul//following-sibling::li[{}]/a/input".format(i)))).click()
    driver.quit()   
    
  • 注意:您必须添加以下导入:

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

问题可能在于变量“字母表”未定义?问题可能在于变量“字母表”未定义?