如何通过Selenium和Python按照网站点击文本为LOGIN的元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过Selenium和Python按照网站点击文本为LOGIN的元素?相关的知识,希望对你有一定的参考价值。

Windows 10Home x64 / Python 3.7.0 win64 / Selenium 3.14.0 / Geckodriver 3.14.0 / Firefox 61.0.2。

我正在尝试单击登录按钮,即使我已经复制并粘贴了完整的XPath,但我无法单击“登录”按钮。

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('https://library.yonsei.ac.kr/')
linkElem = driver.find_element_by_link_text('LOGIN').click() 
username = driver.find_element_by_id('id')
username.send_keys('myuserAbc')
password = driver.find_element_by_id('password')
password.send_keys('mypass123')
linkElem = driver.find_element_by_xpath("/html/body/div[2]/div[2]/div/div[2]/form/fieldset/div[2]/p[@class='loginBtn']/input[@type='submit']").click()

谢谢您的帮助。

Update1:​​脚本工作到本地化登录按钮,我没有Marionette的问题或拥有最新的Firefox版本。

Update2:我添加了p[@class='loginBtn']/input[@type='submit']以使其更具体,但仍然无效。

答案

根据我的经验,我发现按钮单击可能无法在类型设置为操作的表单按钮上运行一些。通过这个方法的最佳方法是使用submit()方法。

所以这样的东西应该适用于您的登录表单

from time import sleep
time.sleep(20) 
driver.find_element_by_class_name('loginBtn').submit()

这会将表单提交给服务器,您将能够完成登录过程。

如果这不起作用,您也可以尝试以下方法

driver.find_element_by_class_name('loginBtn).send_keys(Keys.ENTER)

现在,为什么Button.click();不在这里工作可能有以下原因。

1.按钮可见但未启用。

2.Driver找到了Button元素的2个实例

关于这方面的更多讨论可以在这里找到Selenium: submit() works fine, but click() does not

另一答案

根据您共享的HTML,在文本为LOGIN的元素上调用click(),您需要引入WebDriverWait以使所需元素可单击,您可以使用以下任一解决方案:

  • CSS_SELECTORWebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[title='Login']>span"))).click()
  • XPATHWebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[@title='Login']/span"))).click()

注意:您必须添加以下导入:

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

以上是关于如何通过Selenium和Python按照网站点击文本为LOGIN的元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 python selenium 点击这个元素

如何通过 Selenium WebDriver 和 Python 定位用户名和密码元素

如何通过 Selenium Python 点击​​一个元素

python selenium5 模拟点击+拖动+按照指定相对坐标拖动 58同城验证码

如何通过 Python Selenium BeautifulSoup 从网站中提取证券价格作为文本

Selenium IDE如何模拟鼠标点击网站空白区域?