我有一个问题 - 我使用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
以下定位技术有什么区别?
element(by.id("id")); element(by.css("#id"));element(by.xpath("//*[@id='id']"));browser.executeScript("return document.querySelector('#id');");browser.executeScript("return document.getElementById('id');");而且,从性能角度来看,哪个是通过id定位元素的最快方法?
在官方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%遵循"等.但是,我想知道的是:
javascript selenium google-chrome chromium chrome-web-driver
请帮助我理解为什么使用CSS选择器甚至是自动测试的选项.我一直在我的工作场所使用Ghost Inspector工具为我们的东西创建了大量的自动化测试.此工具为您提供了使用XPath的CSS选择器intead的选项.为什么?
XPath比CSS更耐用.任何给定UI上的CSS几乎每周都会在某些项目/功能上发生变化.这使得测试极其脆弱并且容易经常破裂.
是因为大多数新的测试编写者不想学习任何XPath并希望坚持基础知识吗?CSS选择器看起来比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之间是否有任何区别,或者我没有得到其他问题。
我尝试向某些节点添加新的 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) 我正在尝试从 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) 根据我的理解,CSS选择器遍历DOM.因为CSS文件没有关于元素位置的任何信息,那么为什么cssSelector比XPath(理论上)快.
理论上cssSelector比XPath花费更少的时间,因为XPath需要遍历HTML DOM. XPath我们可以在DOM层次结构中向后或向前搜索元素,而CSS只能在向前方向上工作.
但是如果cssSelector也遍历HTML DOM,那么它如何使cssSelector更快.
换句话说,cssSelector实际上是如何在内部工作的,并说明为什么它总是优先/建议每个人使用xpath
另请分享使用cssSelector而不是XPath的其他好处.
反之亦然,XPath比cssSelector更好
我试图使用Selenium Webdriver-Java计算HTML表格中的总行数(不包括标题).
有人可以指导我关于相同步骤的正确方向吗?
提前致谢!
selenium ×8
xpath ×3
javascript ×2
python ×2
webdriver ×2
automation ×1
chromium ×1
d3.js ×1
dom ×1
html ×1
java ×1
protractor ×1
web-scraping ×1