【问题标题】:Differences in performance of Selenium on PC and RPISelenium 在 PC 和 RPI 上的性能差异
【发布时间】:2020-03-13 14:31:36
【问题描述】:

我在 PC 上开发了一些代码,用于检查特定博客文章的点赞数。它可以在我使用最新版本的 CHrome 和 ChromeDriver for Python 的 PC 上完美运行。

但是,当我使用 Chromium 将此代码传输到我的 RPI 时。它仍然运行,但没有找到 PC 上的版本所具有的任何元素。

这是完全相同的网页,如果我手动检查元素存在,但 RPI 上的代码找不到它。

这是否与 RPI 相对于我的 PC 的内存量或其他一些与硬件相关的问题有关?

我认为这无关紧要,但我要查找的元素是:

driver.find_elements_by_class_name('like-button.ignore-click.is-animated.has-label')

在 WordPress.com 网站上。

这类似于这个问题:

Selenium Error: element not visible (different behaviour on two computers)

但是,我有不同的代码在 rpi 和 pc 上都可以正常运行,即使它们在窗口中不可见也能找到元素

【问题讨论】:

  • 要调试,您可能可以添加代码以截取屏幕截图并检查在 RPI 情况下呈现的内容。此外,您还没有添加脚本抛出的任何特定错误。
  • 脚本本身没有给出任何错误,它只是返回一个空数组,因为它没有找到特定的元素。

标签: python selenium xpath css-selectors classname


【解决方案1】:

在您的代码块中,您尝试通过find_elements_by_class_name(classname) 传递多个类

根据selenium.webdriver.common.by实现的文档:

class selenium.webdriver.common.by.By
    Set of supported locator strategies.

    CLASS_NAME = 'class name'

所以,

  • 使用find_element_by_class_name() 您将无法传递多个类名。

您可以在Invalid selector: Compound class names not permitted using find_element_by_class_name with Webdriver and Python找到详细讨论

实际上,在使用 like-button.ignore-click.is-animated.has-label 作为定位器时,您使用的是


解决方案

作为解决方案,您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    driver.find_element_by_css_selector(".like-button.ignore-click.is-animated.has-label")
                      Note the added ^^^ . ^^^ character in the begining
    
  • 使用XPATH:

    driver.find_element_by_xpath("//*[@class='like-button ignore-click is-animated has-label']")
    

【讨论】:

  • 感谢您的解决方案!我回家后会尝试一下并报告。您对为什么在这种情况下 pc 和 RPI 之间的性能会有所不同有任何见解吗?感谢您的帮助。
  • @JLJ 我认为这行特定的代码不会对性能产生任何影响,但这完全是为了编写优化的定位器。整个测试套件性能是一个更大的图景,是的,有最佳实践。
  • 我使用 css 选择器实现了,它现在可以工作了!谢谢。
猜你喜欢
  • 2013-04-12
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
相关资源
最近更新 更多