Selenium无法点击链接

2024-09-28 05:24:56 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正试图打开一个网页,并点击一个链接,打开一个模式要求输入用户名。输入用户名后,它会要求输入密码。在

我对selenium不太熟悉,正在尝试熟悉浏览器自动化。在

网站是http://mumbai.quikr.com/

在右侧有一个登录/注册选项,打开一个模态。在

在看过youtube视频后,我尝试修改以下代码: https://www.youtube.com/watch?v=--vqRAkcWoM。在

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

import unittest

class LoginTest(unittest.TestCase):

def setUp(self):
    self.driver = webdriver.Firefox(executable_path="C:/Users/dabangg/Downloads/python/geckodriver-v0.16.1-win32/geckodriver.exe")
    self.driver.get("http://mumbai.quikr.com/")

def test_Login(self):
    driver =self.driver


  #  loginLink = "//input[@value='Log In']"
   # loginLink="submit"
   # loginLink="(//a[contains(@id,'loginLink')])[1]"
  #  loginLink = "(//a[contains(@href,'javascript:')])[1]"
    loginLink = '//*[@id=\'loginLink\']/'


    loginButtonElement = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_xpath(loginLink))


    loginButtonElement.click()


def tearDown(self):
    self.driver.quit()

if __name__ == '__main__':
    unittest.main()

我试图使用class/id/xpath来定位元素,但是它们都不起作用。使用span,我能够找到元素,但是我得到一条消息,说元素是不可交互的。在

另外,在另一个不能有人请帮我区别或使用下面

  1. 请求
  2. 靓汤

哪一个更适合使用/学习。在


Tags: importselfcomidhttp元素defdriver
3条回答

我通常使用C,但问题的起因是您使用的是一个id,在代码中您称之为xpath:

find_element_by_xpath(loginLink))

可能应该是find\u element\u by_id(loginLink)) 在C语言中,我会用引号将Id括起来,但我不知道这是否有效。

如果您像以前一样通过xpath找到element,那么使用find_element_by_xpath(.//*[@id='loginLink']/span)…但是注意引号,因为在我的语言中,我们将其视为字符串,所以我不知道什么对您有效

我只是添加了一个睡眠命令,现在它正在工作。代码如下:

https://www.youtube.com/watch?v= vqRAkcWoM

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

import unittest
import time

class LoginTest(unittest.TestCase):

def setUp(self):
    self.driver = webdriver.Firefox(executable_path="C:/Users/dabangg/Downloads/python/geckodriver-v0.16.1-win32/geckodriver.exe")
    self.driver.get("http://mumbai.quikr.com/")

def test_Login(self):
    driver =self.driver


  #  loginLink = "//input[@value='Log In']"
   # loginLink="submit"
   # loginLink="(//a[contains(@id,'loginLink')])[1]"
  #  loginLink = "(//a[contains(@href,'javascript:')])[1]"
    loginLink = ".//*[@id='loginLink']/span"


    loginButtonElement = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_xpath(loginLink))
    time.sleep(5)


    loginButtonElement.click()
    time.sleep(5)


def tearDown(self):
    self.driver.quit()

if __name__ == '__main__':
unittest.main()

尝试通过linkText找到所需的元素,并等待它变为可单击:

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

link_text = "Login/Register"
loginButtonElement = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, link_text)))
loginButtonElement.click()

请注意,在您的定位器'//*[@id=\'loginLink\']/'中,谓词后面有额外的斜杠。尝试删除斜杠('//*[@id=\'loginLink\']')以使定位器有效

相关问题 更多 >

    热门问题