如何通过Selenium和Python点击带有文本的元素作为网站的登录名?

如何通过Selenium和Python点击带有文本的元素作为网站的登录名?,python,selenium,xpath,css-selectors,webdriver,Python,Selenium,Xpath,Css Selectors,Webdriver,Windows 10Home x64/ Python 3.7.0 win64/ 硒3.14.0/ 壁虎河3.14.0/ 火狐61.0.2 我试图单击登录按钮,尽管我已经复制并粘贴了完整的XPath,但我无法单击登录按钮 from selenium import webdriver driver = webdriver.Firefox() driver.get('https://library.yonsei.ac.kr/') linkElem = driver.find_element_by_l

Windows 10Home x64/ Python 3.7.0 win64/ 硒3.14.0/ 壁虎河3.14.0/ 火狐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()
谢谢你的帮助

更新1:该脚本可以本地化登录按钮,我对木偶或最新版本的Firefox没有任何问题


更新2:我添加了
p[@class='loginBtn']/input[@type='submit']
,以使其更具体,但仍然不起作用。

根据我的经验,我发现在类型设置为action的表单按钮上,有时按钮单击可能不起作用。完成此任务的最佳方法是使用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)
现在,为什么单击按钮。单击();不在这里工作可能会有以下问题 原因

1.按钮可见但未启用

2.驱动程序正在查找按钮元素的2个实例

。有关这方面的更多讨论可在此处找到


根据您共享的HTML,在文本为“登录”的元素上调用
click()
,您需要诱导WebDriverWait以使所需元素可单击,并且您可以使用以下任一解决方案:

  • CSS\u选择器

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

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

Hi Jishnu,我尝试了第一个命令self.driver。单击self-class\u-name('loginBtn').submit()但得到了这个错误“self.driver。单击self-class\u-name('loginBtn').submit()name错误:name'self'没有定义“我应该如何定义self?Hi Jishnu,我尝试了第一个命令self.driver。单击self-class\u-class\u-name('loginBtn').submit())但出现以下错误“self.driver.click\u element\u by\u class\u name('loginBtn')。submit()name错误:名称“self”未定义“我应该如何定义self?”?还尝试了以下操作:linkElem=driver.click_element_by_class_name('loginBtn').submit(),但出现以下错误:AttributeError:“WebDriver”对象没有属性“click_element_by_class_name”self是对类的当前实例的引用。我看到您没有定义任何类。我在答案上打了一个字。它已经更新,现在应该可以工作了让我知道它是否工作或者它是否仍然给您带来异常无法登录。尝试
密码。提交()
而不是单击提交按钮Hi Andersson,当我运行该命令时,它会带我回到上一页()知道原因吗?谢谢您的尝试,我运行了脚本,但它没有登录。我想网站上一定有什么东西阻止了自动登录。@AndresToro你说的“代码”到底是什么意思?代码经过了很好的测试,可以正常工作。你被困在哪里?使用您当前的代码尝试和错误堆栈跟踪更新问题以进行进一步分析。请检查编辑注释。我正在学习Python,我不能告诉你为什么它不工作,但我可以告诉你运行Python后它会返回什么。@Andrestro请看你问题的初始版本。你的问题非常具体,因为我试图点击登录按钮,但我无法点击登录按钮。但现在,在收到经过充分研究的答案后,您正在修改您的问题,根据stackoverflow标准,每一次编辑都是不道德的。如果您的要求发生了变化,请根据您的新要求提出新问题。这一次,我将问题还原为初始版本。@AndresToro如果我的答案符合您的问题,请单击我答案旁边的空心复选标记(位于votedown箭头的正下方)来输入答案,使复选标记变为绿色。