无法使用selenium单击链接

时间:2017-05-20 10:30:17

标签: python selenium xpath beautifulsoup

您好我正在尝试打开一个页面并单击一个链接,该链接打开一个模式询问用户名。输入用户名后,它会要求输入密码。

我是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. 哪一个更好用/学习。

3 个答案:

答案 0 :(得分:0)

尝试按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\']')以使定位器有效

答案 1 :(得分:0)

我通常使用C#,但似乎导致问题的是您使用的是id,并且在代码中将其称为xpath:

  

find_element_by_xpath(LOGINLINK))

应该是find_element_by_id(loginLink)) 在C#中,我会将Id包含在引号中,但我不知道你是否会这样做。

如果你发现像xpath一样的元素,而不是使用这个find_element_by_xpath(.//* [@ id ='loginLink'] / span)...但是请注意我的语言中的引号,我们将其视为一个字符串,所以我不知道什么对你有用

答案 2 :(得分:-1)

我只是添加了一个睡眠命令,它现在正在运行。下面是代码:

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