无法使用 Selenium WebDriver 和 Python 访问特定网站上的文本框和按钮

我正在迈出硒的第一步,现在正面临一个奇怪的问题。我想在网站上导航并在搜索框中输入文本,然后单击“输入”按钮进入下一页。总的来说,我知道如何做到这一点,并且它可以在其他网站上无缝运行,但是这个网站似乎以某种方式引起了麻烦。当我按名称搜索文本框和按钮时,它只是找不到它们。同样的问题,如果我尝试通过 xPath 或 ID 访问它们...网站是:http : //www.dsv.de/schwimmen/wettkampf-national/schwimmerabfrage/(德国游泳协会数据库)


到目前为止,我的代码如下所示:


from selenium import webdriver

from selenium.webdriver.common.keys import Keys


url = "http://www.dsv.de/schwimmen/wettkampf-national/schwimmerabfrage/"


driver = webdriver.Chrome()

driver.get(url)


submit_button = driver.find_element_by_name("_submitButton")

fistname_textbox = driver.find_element_by_xpath('//*[@id="_firstnameTextBox"]')

lastname_textbox = driver.find_element_by_xpath('//*[@id="_lastnameTextBox"]')

regid_textbox = driver.find_element_by_id("_regidTextBox")


fistname_textbox.send_Keys("String 1")

lastname_textbox.send_keys("String 2")

submit_button.click()


driver.close()

如果你们中的任何人能帮助我并找出导致此问题的原因,我将不胜感激:) 我现在越来越困惑


皈依舞
浏览 330回答 3
3回答

繁星淼淼

该文本框和按钮元素内的<iframe>,所以你必须:Induce WebDriverWait等待所需的框架可用并切换到它。Induce WebDriverWait使所需元素可点击。您可以使用以下解决方案:代码块:from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECoptions = webdriver.ChromeOptions()options.add_argument('start-maximized')options.add_argument('disable-infobars')options.add_argument('--disable-extensions')driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')driver.get("http://www.dsv.de/schwimmen/wettkampf-national/schwimmerabfrage/")WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe[@src='https://dsvdaten.dsv.de/Modules/Results/Individual.aspx?Lang=de-DE']")))WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='TextBox' and @id='_firstnameTextBox']"))).send_keys("juliu_mbr")driver.find_element_by_xpath("//input[@class='TextBox' and @id='_lastnameTextBox']").send_keys("juliu_mbr")driver.find_element_by_xpath("//input[@class='Button' and @id='_submitButton']").click()浏览器快照:在这里你可以找到关于Ways to deal with #document under iframe的相关讨论

拉丁的传说

all部分在<iframe>标签里面,你需要先切换到它from selenium.webdriver.support import expected_conditions as ecfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.by import Bywait = WebDriverWait(driver, 5)wait.until(ec.frame_to_be_available_and_switch_to_it((By.TAG_NAME, 'iframe')))submit_button = driver.find_element_by_name("_submitButton")#...

三国纷争

您需要切换到框架,然后定位元素url = "http://www.dsv.de/schwimmen/wettkampf-national/schwimmerabfrage/"driver = webdriver.Chrome()driver.get(url)driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@src='https://dsvdaten.dsv.de/Modules/Results/Individual.aspx?Lang=de-DE']'));// then your code for the Loginsubmit_button = driver.find_element_by_name("_submitButton")fistname_textbox = driver.find_element_by_xpath('//*[@id="_firstnameTextBox"]')lastname_textbox = driver.find_element_by_xpath('//*[@id="_lastnameTextBox"]')regid_textbox = driver.find_element_by_id("_regidTextBox")fistname_textbox.send_Keys("String 1")lastname_textbox.send_keys("String 2")submit_button.click()driver.close()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python