![](/img/trans.png)
[英]Unable to get the script to slide a button to the right using python selenium webdriver
[英]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>
因此您必須:
您可以使用以下解決方案:
代碼塊:
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()
瀏覽器快照:
在這里,您可以找到有關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.