簡體   English   中英

無法使用Selenium WebDriver和Python訪問特定網站上的文本框和按鈕

[英]Unable to access textbox and button on specific website using Selenium WebDriver and 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()

如果你們中的任何人能夠幫助我並找出導致這個問題的原因,我會非常感激:)我現在越來越困惑了

全部部分位於<iframe>標記內,您需要先切換到它

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

wait = 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")
#...

您嘗試定位元素是不成功的,因為它們嵌套在iframe 在嘗試單擊或以任何方式使用它之前,必須告訴硒切換到包含所需元素的iframe 請嘗試以下方法:

from selenium import webdriver

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

driver = webdriver.Chrome()
driver.get(url)
driver.switch_to.frame(0);
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()

文本框和按鈕元素位於<iframe>因此您必須:

  • 誘導WebDriverWait獲得所需的幀並切換到該幀
  • 誘導WebDriverWait 以獲得可點擊的所需元素
  • 您可以使用以下解決方案:

    • 代碼塊:

       from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC options = 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() 
  • 瀏覽器快照:

dsv_de

在這里,您可以找到有關iframe下#document處理方式的相關討論

您需要切換到框架,然后找到元素

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 Login

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM