【问题标题】:Selenium Python Automation picking best locator typeSelenium Python 自动化选择最佳定位器类型
【发布时间】:2019-01-04 21:36:26
【问题描述】:

我正在尝试使用最好的“定位元素”语句来自动化登录到特定网站的过程(使用 selenium 和 python)。我附上了登录页面的 html 代码图片:

HTML CODE

并且正在寻找图像中突出显示部分的定位器元素(例如:username = driver.find_element_by ....)。

【问题讨论】:

  • 请在问题中发布代码,而不是屏幕截图,因为某些用户可能无法访问图片托管网站
  • “最佳”定位策略是当您使用 id 定位时,因为 id 对于 DOM 是唯一的。如果您不能使用 id 位置,请使用 css,因为 css 比其他策略更快。您可以使用 XPath 的替代方法 ...

标签: python login automation selenium-chromedriver


【解决方案1】:

您能详细说明您的问题吗? “并且正在寻找以下部分的定位器元素(例如:username = driver.find_element_by ....):”

如果您要查找突出显示的元素。我会使用find_element_by_id("UserName")

【讨论】:

  • 我先尝试过,但收到以下错误消息: NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"UserName"} (Session info : chrome=71.0.3578.98) (驱动信息: chromedriver=2.42.591088 (7b2b2dca23cca0862f674758c9a3933e685c27d5),platform=Windows NT 10.0.15063 x86_64)
【解决方案2】:

“最佳”实际上是您认为最不可能改变的问题。通常,这将是元素的id。

在你的例子中,我会使用username = driver.find_element_by_id('UserName').getAttribute('value')

但是,有时元素没有id。同样,“最佳”应该基于最不可能改变的内容。按照我的经验从最好到最差的顺序排列:

  1. id
  2. name
  3. find_elements_by_xpath("//*[contains(text(), 'xyz')]") 的某些版本
  4. xpath
  5. css_selector

【讨论】:

  • username = driver.find_element_by_id('UserName').getAttribute('value') 给了我另一个 NoSuchElementException 错误
  • @Its_code_outside:您在发布的同一页面上运行代码?显然有一个 id 为“UserName”的元素,所以它应该可以工作,除非该元素被延迟加载或加载时间过长。在这种情况下,您可能需要导入时间并添加 time.sleep(5) 以等待 5 秒以使页面完全加载。
  • 我实际上已经有 time.sleep(5) 了……这就是为什么我很困惑为什么它不起作用。
  • 这似乎是整体路径: html > frameset > frame > html > body > div > div.logoncontent > div#logon_content > form > div#r1 > div > input#UserName(即单击“检查元素”后页面底部显示的内容)
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多