相关疑难解决方法(0)

Python - Selenium WebDriver - 检查元素存在

我有一个问题 - 我使用selenium(firefox)网络驱动程序打开网页,点击几个链接等然后捕获截图.

我的脚本在CLI中运行良好,但是当通过cronjob运行时,它没有超过第一个find_element()测试.我需要添加一些调试,或者某些东西来帮助我找出它失败的原因.

基本上,我必须在进入登录页面之前单击"登录"锚点.元素的构造是:

<a class="lnk" rel="nofollow" href="/login.jsp?destination=/secure/Dash.jspa">log in</a>
Run Code Online (Sandbox Code Playgroud)

我正在使用find_element By LINK_TEXT方法:

login = driver.find_element(By.LINK_TEXT, "log in").click()
Run Code Online (Sandbox Code Playgroud)

我有点像Python Noob,所以我正在与语言作斗争......

A)如何检查链接是否实际被python拾取?我应该使用try/catch块吗?

B)是否有比LINK_TEXT更好/更可靠的方法来定位DOM元素?例如,在JQuery中,您可以使用更具体的选择器$('a.lnk:contains(登录)').do_something();


我已经解决了主要问题,这只是手指麻烦 - 我用不正确的参数调用脚本 - 简单的错误.

我仍然喜欢一些关于如何检查元素是否存在的指针.另外,隐式/显式Waits的示例/解释而不是使用糟糕的time.sleep()调用.

干杯,ns

html python selenium webdriver

55
推荐指数
6
解决办法
12万
查看次数

按ID定位元素

以下定位技术有什么区别?

  1. element(by.id("id"));
  2. element(by.css("#id"));
  3. element(by.xpath("//*[@id='id']"));
  4. browser.executeScript("return document.querySelector('#id');");
  5. browser.executeScript("return document.getElementById('id');");

而且,从性能角度来看,哪个是通过id定位元素的最快方法?

selenium xpath css-selectors selenium-webdriver protractor

25
推荐指数
3
解决办法
1万
查看次数

webdriver的官方定位策略

官方W3c webdirver文档中,明确指出位置策略是:

State   Keyword
CSS selector    "css selector"
Link text selector  "link text"
Partial link text selector  "partial link text"
Tag name    "tag name"
XPath selector  "xpath"
Run Code Online (Sandbox Code Playgroud)

但是,Selenium的电线协议允许:

class name  
css selector
id  
name
link text
partial link text
tag name
xpath
Run Code Online (Sandbox Code Playgroud)

在理论中,Selenium的文档已经过时,"真实"的故事在新的规范文档中.然而...

我在最新的Chrome自己的Webdriver上运行了一些测试,我可以确认这一点,name并且class name两者都有效; 但是,它们不符合规格.

我记得在Chromium问题上阅读他们只会实现官方的Webdriver规范.

现在:我知道通用答案,其中"规格并不总是100%遵循"等.但是,我想知道的是:

  • 你能找到Chromium中实现这个的代码吗?(链接将是最受欢迎的)
  • 在Chromium邮件列表中是否有关于这些的讨论?
  • "非官方"命令("旧"硒规格文件中记录的)可能会留下来吗?你在哪里读到的?

javascript selenium google-chrome chromium chrome-web-driver

12
推荐指数
1
解决办法
5128
查看次数

为什么我应该使用CSS选择器而不是XPath进行自动化测试?

请帮助我理解为什么使用CSS选择器甚至是自动测试的选项.我一直在我的工作场所使用Ghost Inspector工具为我们的东西创建了大量的自动化测试.此工具为您提供了使用XPath的CSS选择器intead的选项.为什么?

XPath比CSS更耐用.任何给定UI上的CSS几乎每周都会在某些项目/功能上发生变化.这使得测试极其脆弱并且容易经常破裂.

是因为大多数新的测试编写者不想学习任何XPath并希望坚持基础知识吗?CSS选择器看起来比XPath语法更漂亮?请说服我.谢谢.

selenium xpath automation css-selectors

6
推荐指数
2
解决办法
2040
查看次数

对于不同的浏览器,xpath是否有所不同?

我有一个非常有趣的问题。我正在通过xpath获取价值。

例如

System.out.print(driver.findElement(By.xpath("//*[@id='error-box']/ul/li")).getText().toString());
Run Code Online (Sandbox Code Playgroud)

在firefox和Chrome中,它给出相同的文本,而在IE中,它给出不同的文本。

各种浏览器的xpath之间是否有任何区别,或者我没有得到其他问题。

selenium selenium-webdriver

5
推荐指数
2
解决办法
7884
查看次数

如何通过文本内容查找 DOM 元素?

我尝试向某些节点添加新的 SVG 元素。为此,要添加元素的节点必须通过包含在文本内容中的字符串找到,例如,找到"id0"<text>标签内具有的任何节点。

这是我的 HTML 层次结构的示例:

<pre>
 <svg>
  <g>
   <g>
    <text> id3 </text>
    <text> 73% </text>
    <svg> ... </svg>
   </g>
   <g>
    <svg> ... </svg>
   </g>
   <g>
    <text> id0 </text>
    <text> 11% </text>
    <svg> ... </svg>
   </g>
   <g>
    <text> id1 </text>
    <text> 66% </text>
    <svg> ... </svg>
   </g>
   <g>
    <svg> ... </svg>
   </g>
  </g>
 </svg>
</pre>
Run Code Online (Sandbox Code Playgroud)

我绝对不知道正确的解决方案,但我认为它是这样的:

d3.select('svg').select('g').selectAll('g').each(function (d, i) {})
                .select('g').select('text').filter(function () {
                  return (d3.select(this).text() === 'id0')
                })
                .select(function () {
                  return this.parentElement;
                })
                .append('svg')
                .attr('width', …
Run Code Online (Sandbox Code Playgroud)

javascript dom d3.js

5
推荐指数
2
解决办法
1120
查看次数

如何加速python selenium find_elements?

我正在尝试从 kompass.com 抓取公司信息

但是,由于每个公司简介提供的详细信息数量不同,某些页面可能缺少元素。例如,并非所有公司都有关于“协会”的信息。在这种情况下,我的脚本需要很长时间来搜索这些缺失的元素。无论如何我可以加快搜索过程吗?

这是我的脚本的摘录:

import time
import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import ElementNotVisibleException
from lxml import html

def init_driver():
    driver = webdriver.Firefox()
    driver.wait = WebDriverWait(driver, 5)
    return driver

def convert2text(webElement):
    if webElement != []:
        webElement = webElement[0].text.encode('utf8')
    else:
        webElement = ['NA']
    return webElement

link='http://sg.kompass.com/c/mizkan-asia-pacific-pte-ltd/sg050477/'
driver = init_driver()
driver.get(link)
driver.implicitly_wait(10)

name = driver.find_elements_by_xpath("//*[@id='productDetailUpdateable']/div[1]/div[2]/div/h1")
name = convert2text(name)

## Problem:
associations …
Run Code Online (Sandbox Code Playgroud)

python selenium web-scraping selenium-webdriver

3
推荐指数
1
解决办法
5577
查看次数

cssSelector与XPath for selenium

根据我的理解,CSS选择器遍历DOM.因为CSS文件没有关于元素位置的任何信息,那么为什么cssSelectorXPath(理论上)快.

理论上cssSelector比XPath花费更少的时间,因为XPath需要遍历HTML DOM. XPath我们可以在DOM层次结构中向后或向前搜索元素,而CSS只能在向前方向上工作.

但是如果cssSelector也遍历HTML DOM,那么它如何使cssSelector更快.

换句话说,cssSelector实际上是如何在内部工作的,并说明为什么它总是优先/建议每个人使用xpath

另请分享使用cssSelector而不是XPath的其他好处.

反之亦然,XPathcssSelector更好

selenium xpath webdriver css-selectors selenium-webdriver

2
推荐指数
1
解决办法
4360
查看次数

使用Selenium Webdriver(Java)的html表行数

我试图使用Selenium Webdriver-Java计算HTML表格中的总行数(不包括标题).

有人可以指导我关于相同步骤的正确方向吗?

提前致谢!

java selenium selenium-webdriver

-1
推荐指数
1
解决办法
1万
查看次数