如何修复Python Selenium无法单击目标元素的问题?

如何修复Python Selenium无法单击目标元素的问题?,python,selenium,click,Python,Selenium,Click,我的Python Selenium不能单击目标元素,而应该单击目标元素后面的元素? 我尝试单击,或在“下拉菜单”中输入文本,但我发现我正在单击此“下拉菜单”后面的元素。我知道这是后面的元素,因为后面有一个平推区域,结果显示相同的平推材质。这是我的密码: # info for login my_email = 'my_email' my_passcode = 'my_passcode' email_url = r'https://www.gmx.com/#.1559516-header-navlo

我的Python Selenium不能单击目标元素,而应该单击目标元素后面的元素? 我尝试单击,或在“下拉菜单”中输入文本,但我发现我正在单击此“下拉菜单”后面的元素。我知道这是后面的元素,因为后面有一个平推区域,结果显示相同的平推材质。这是我的密码:

# info for login
my_email = 'my_email'
my_passcode = 'my_passcode'
email_url = r'https://www.gmx.com/#.1559516-header-navlogin2-1'

# start driver and open url
driver = webdriver.Chrome(chrome_path)
driver.get(email_url)

# input email account
xpath = r'//*[@id="login-email"]'
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target = driver.find_element_by_xpath(xpath)
actions = ActionChains(driver)
actions.move_to_element(target).perform()
actions.click().send_keys(my_email).perform()

# input passcode and hit 'enter' to login
xpath = r'//input[@id="login-password"]'
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target = driver.find_element_by_xpath(xpath)
actions = ActionChains(driver)
actions.move_to_element(target).perform()
actions.click().send_keys(my_passcode).send_keys(Keys.ENTER).perform()
这发生在我的其他一些网站时,该网站似乎有“两层”不确定我是否使用了正确的词。我可以在顶层处理任何东西,但只能激活它后面的任何东西。非常感谢您提供解决方案

您不需要使用这个类,您所需要做的一切都可以使用和来完成 使用后不需要重新查找元素,因为如果成功,它将返回WebElement 我在脚本中的任何位置都看不到ClickSign on login按钮,您可以使用以下方法找到相关按钮:

然后对结果变量调用click函数

建议代码示例:

# input email account
xpath = r'//*[@id="login-email"]'
target = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target.send_keys(my_email)

# input passcode and hit 'enter' to login
xpath = r'//input[@id="login-password"]'
target = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target.send_keys(my_passcode)

xpath = r'//button[contains(@class,"login-submit")]'
target = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target.click()
您不需要使用这个类,您所需要做的一切都可以使用和来完成 使用后不需要重新查找元素,因为如果成功,它将返回WebElement 我在脚本中的任何位置都看不到ClickSign on login按钮,您可以使用以下方法找到相关按钮:

然后对结果变量调用click函数

建议代码示例:

# input email account
xpath = r'//*[@id="login-email"]'
target = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target.send_keys(my_email)

# input passcode and hit 'enter' to login
xpath = r'//input[@id="login-password"]'
target = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target.send_keys(my_passcode)

xpath = r'//button[contains(@class,"login-submit")]'
target = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target.click()

当您尝试单击第一个或第二个元素时会发生这种情况吗?同时尝试将xpath=r'/*[@id=login email]'更改为xpath=r'///input[@id=login email]'第一个和第二个元素的含义是什么?我尝试了这两种xpath,但遇到了相同的问题。请尝试使用类似的方法单击以下内容:def klkelem,driver:action=webdriver.common.action\u chains.ActionChainsdriver.execute\u scriptarguments[0]。scrollIntoView;,elem action.move_to_element elem.click.perform log.debug'element clicked'谢谢,它正在工作。除了解决方案,您能解释一下它在代码和逻辑背后是如何工作的吗?我还有其他类似这样做的代码:1.等待xpath>2。重新定义xpath的元素我知道现在不需要>3。单击或发送密钥的操作链。大多数网站仍然以这种方式工作,但像这个例子这样的网站很少不工作。我以旧方式添加的额外操作导致无法到达用户的webelements webelements并传递空白区域。非常感谢
# input email account
xpath = r'//*[@id="login-email"]'
target = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target.send_keys(my_email)

# input passcode and hit 'enter' to login
xpath = r'//input[@id="login-password"]'
target = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target.send_keys(my_passcode)

xpath = r'//button[contains(@class,"login-submit")]'
target = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
target.click()