我正在用Python创建一个Selenium机器人。该驱动程序应该打开instagram.com并使用用户凭据作为输入填写登录表单。发生错误:
# FIRST I OPEN INSTAGRAM LIKE THIS
self.driver.get("https://www.instagram.com/")
# THEN A POP-UP APPEARS, AND I CLOSE IT BY CLICKING IN THE ACCEPT BUTTON,
# IT SEEMS LIKE IT IS NOT AN IFRAME SO NO FRAME SWITCHES ARE NEEDED
cooki = self.driver.find_element_by_xpath('/html/body/div[2]/div/div/div/div[2]/button[1]')
cooki.click()
# NOW I TRY TO FIND THE USERNAME FORM TO WRITE IN AN INPUT
usbar = self.driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]') # ERROR HERE
usbar.send_keys(input('Username: '))
错误提示:
NoSuchElementException:否这样的元素:无法找到元素:{“ method”:“ xpath”,“ selector”:“ // * [@ id =” loginForm“] / div / div [1]”}
它找不到要在其中写入的用户名表单。我相信不会有iframe,我不知道是否还有其他问题阻止驾驶员找到它。我还很新,所以我还不能上传页面html的图像,这就是为什么我包括打开页面的行。谁能提出一个万无一失的解决方案?
从我可以看到有两个问题。
您正在尝试调用send_keys()
一个div
元素。您可能正在寻找的是input
元素,它嵌套在该div
元素内部。
这可以通过稍微更改XPATH来获得:
element = self.driver.find_element_by_xpath('//*[@name="username"]')
element.send_keys('...')
另一个可能的问题是元素并不总是立即加载-有时您必须等待元素出现在HTML中才能找到它。这可以通过使用Webdriver.Wait()
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Wait for the element to appear in the HTML for a maximum of 10 seconds
element = WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.NAME, "username"))
)
# Send input to the element
element.send_keys('...')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句