【问题标题】:Locating divs with changing class names (selenium)使用更改类名定位 div (selenium)
【发布时间】:2017-03-04 21:24:47
【问题描述】:

我正在在线学习 selenium 课程,我们正在自动登录。讲座已过时,我们使用的网站已更新(Quora)。

问题是,输入字段有随机生成的类名,这使得“find_element_by_id方法无用。

我不知道如何登录不同的会话。 我将如何在不同的会话期间选择这些字段(具有不同的类名)。这就是我的代码的样子。先感谢您。我尝试询问课程讲师,但他整个星期都没有回应。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys


driver = webdriver.Chrome(executable_path = r'/Users/mpbro17/Desktop/chromedriver')

driver.get('https://www.quora.com')

driver.find_element_by_id("__w2_fy0VXDC_email").clear()
driver.find_element_by_id("__w2_fy0VXDC_email").send_keys("programmingdude183@gmail.com")
driver.find_element_by_id("__w2_fy0VXDC_password").clear()
driver.find_element_by_id("__w2_fy0VXDC_password").send_keys("testpassword1")
driver.find_element_by_id("__w2_fy0VXDC_submit_button").click()

错误

Traceback (most recent call last):
  File "/Users/mbpro/Desktop/projects/scraping_course/test_quora_login.py", line 13, in <module>
    driver.find_element_by_name("email").clear()
  File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 92, in clear
    self._execute(Command.CLEAR_ELEMENT)
  File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 494, in _execute
    return self._parent.execute(command, params)
  File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidElementStateException: Message: invalid element state: Element is not currently interactable and may not be manipulated
  (Session info: chrome=53.0.2785.143)
  (Driver info: chromedriver=2.24.417412 (ac882d3ce7c0d99292439bf3405780058fcca0a6),platform=Mac OS X 10.11.5 x86_64)

【问题讨论】:

    标签: python python-2.7 selenium automation


    【解决方案1】:

    您必须按照标准使用名称。但是,如果您使用名称属性,则存在两个元素。

    所以走下面的xpath

    //div[@class='regular_login']//input[@name='email']
    //div[@class='regular_login']//input[@name='password']
    //div[@class='regular_login']//input[contains(@class,'submit')]
    

    【讨论】:

    • hmm,我从来没有使用过 find_element_by_xpath() 看起来怎么样?经过多次尝试。我似乎无法弄清楚
    【解决方案2】:

    您可以使用 find_element_by_name 方法来查找您的元素(电子邮件和密码)和登录按钮的 cssSelector。我想,这不会让你灰心丧气。

    driver.find_element_by_name("email").clear()
    driver.find_element_by_name("email").send_keys("programmingdude183@gmail.com")
    driver.find_element_by_name("password").clear()
    driver.find_element_by_name("password").send_keys("testpassword1")
    driver.find_element_by_css_selector("input[value='Login']").click()
    

    【讨论】:

    • 我尝试了类名和这个.. 我不断收到错误消息。我把它粘贴在问题中
    • 我不是在谈论类名。您正在处理的标签中有一个名为“名称”的属性。这是在 selenium 中查找定位器的方法之一。
    • 我知道.. 我只是让你知道我还尝试了什么。按名称查找元素仍然给了我问题中的错误。你看了吗?
    【解决方案3】:

    尝试使用 css 选择器:

    driver.find_element_by_css_selector('[id$="email"]')
    driver.find_element_by_css_selector('[id$="password"]')
    driver.find_element_by_css_selector('[id$="submit_button"]')
    

    【讨论】:

    • 我试过了,但仍然出现错误“第 192 行,在 check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.InvalidElementStateException: Message: invalid element state: Element must be user - 可编辑以清除它。”
    猜你喜欢
    • 2020-01-09
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2016-07-16
    相关资源
    最近更新 更多