我正在尝试使用 Python、Selenium 和 Xpath 从站点收集一些数据。我想要多个数据点,它们都在这个结构中:
/tr[1]/td
/tr[2]/td
/tr[3]/td
/tr[4]/td
Run Code Online (Sandbox Code Playgroud)
我不知道有多少<tr>,所以我试图以一种只给我所有结果的方式进行搜索(希望在列表中)。我怎么做?
这是我的实际代码,但这只是给我个人结果。我是网络抓取的新手,不确定问题是否出在我的 Xpath 上(没有正确使用通配符,或者它是否与我的 get_attribute 标签有关 - 如果它获得了innerhtml,那么它是否只为单个条目获得它?)
data = driver.find_element_by_xpath('//*[@id="a-stockFinancials_tabs"]/div[2]/div[1]/table/tbody/tr[5]/td').get_attribute("innerHTML")
print data
Run Code Online (Sandbox Code Playgroud) 我在 jmeter 测试套件中使用 xpath 断言,但在处理我收到的响应中的动态内容时遇到问题。有没有办法使用我在 xpath 断言中定义的 jmeter 变量?我试过这个,但它不起作用。
/response/body/locationReports/locationReport[@deviceHandle = ${deviceHandle}]
Run Code Online (Sandbox Code Playgroud) xpath
driver.findElement(By.xpath("//input[@accesskey='9']"));
Run Code Online (Sandbox Code Playgroud)
我们如何在 accesskey 属性中传递 Dynamic 值,因为 accesskey 属性分配有任何整数
所以我从数据库中获取该 id 并尝试在 accesskey 属性中传递该 id 如何使用 java?
html代码
td style="width: 5%;">
<input type="checkbox" data-bind="attr: { accesskey: Id }" accesskey="6">
</td>
<td style="width: 5%;">
<input type="checkbox" data-bind="attr: { accesskey: Id }" accesskey="7">
</td>
Run Code Online (Sandbox Code Playgroud)
代码
public void portfolioRenewalSearch(String portfolioId) throws Exception {
try {
driver.findElement(By.xpath("//input[@accesskey= portfolioId]"))
.click();
} catch (AssertionError Ae) {
Ae.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但上面的代码显示异常“selenium.NoSuchElementException”
我正在提取关于标签的文本,我需要以列表形式获取它们 wrt p 标签。我有这个 xpath 表达式:
find = etree.XPath("//w:p//.//*[local-name() = 'ins']//text()" ,namespaces={'w':"http://schemas.openxmlformats.org/wordprocessingml/2006/main"})
Run Code Online (Sandbox Code Playgroud)
我想在findall表达式中使用它。我试过:
inserted_list_1=[]
for p in lxml_tree.findall('.//{' + w + '}p'):
inserted_list_1.append([t.text for t in p.findall('.//{' + w + '}ins')])
Run Code Online (Sandbox Code Playgroud)
但所有这些返回的是一个充满None值的列表,而前 xpath 工作得很好。
我认为缺少一些中间路径。
我有一个 XPath /html/body/div[1]/div/div/center[1]/table,我想让它不再可见。
我看到我可以使用,document.evaluate()但我不知道如何隐藏它。
嗨,我正在使用python 的scrapy 从站点上刮下一张表,所以我必须使用scrapy 的Selector xpath 来执行此操作。我正在考虑获取表格的所有数据内容,然后将其与表格标题一起压缩 (zip()),以便在我的最终数据中,表格的每个数据内容都与代表它的标签相匹配。但是,我注意到表的某些部分没有值.. 就像 in 而不是
<td>24</td>
Run Code Online (Sandbox Code Playgroud)
只是
<td></td>
Run Code Online (Sandbox Code Playgroud)
当我抓取时,scrapy 会跳过空标签并获取下一个值。这搞砸了我要压缩的方式,因为由于缺少值,所有东西都可能向左移动一个或多个。那么..有没有办法让scrapy的选择器xpath返回某种空标识符,那里缺少某些东西,以便我可以解释丢失的信息?或者,也许有更好的方法来解决我的问题,以防止发生此问题?谢谢!
编辑:xpath 看起来像......
Selector(response).xpath("tbody/tr/td/text()").extract()
Run Code Online (Sandbox Code Playgroud) 我想使用 EXSLT 库在 XSLT 1.0 中编写一个函数。这是我的样式表。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:func="http://exslt.org/functions"
xmlns:my="http://www.example.com/">
<xsl:output method="text" encoding="UTF-8"/>
<func:function name="my:test">
<xsl:param name="param1" />
<xsl:param name="param2" />
<func:result select="concat($param1, $param2)" />
</func:function>
<xsl:template match="/">
<xsl:value-of select="my:test('test1', 'test2')" />
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试执行它xsltproc时出现以下错误。
{ http://www.example.com/ }test: 调用时参数过多 xmlXPathCompiledEval: 堆栈上还剩 1 个对象。运行时错误:文件 exslt_function_test.xsl 第 16 行元素值-XPath 评估未返回结果。
我没有看到任何错误。该函数被定义和调用正好有两个参数。过去有没有人遇到过类似的问题?
删除任何不必要的评论... 不,我不能使用 XSLT 2.0。
这是我的示例 Python 代码
import requests
import lxml.html
page = '<div class="aaaa12"><span class="test">22</span><span class="number">33</span></div><div class="dddd13"><span>Kevin</span></div>'
tree = lxml.html.fromstring(page)
number = tree.xpath('//span[@class="number"]/text()')
price = tree.xpath('.//div[@class="dddd13"]/span/text()')
print number
print price
Run Code Online (Sandbox Code Playgroud)
当我跑步时,我可以像下面这样
['33']
['Kevin']
Run Code Online (Sandbox Code Playgroud)
但是,我想同时得到两个像 = ['33','Kevin'] 我试过了
number = tree.xpath('//span[@class="number"]/text() or //div[@class="dddd13"]/span/text()')
Run Code Online (Sandbox Code Playgroud)
我无法获得价值。获得两个不同类的语法是什么?
我正在尝试使用 Python lxml 从页面导入文本列表。这是我到目前为止所拥有的。
test_page.html 来源:
<html>
<head>
<title>Test</title>
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr><td><a title="This page is cool" class="producttitlelink" href="about:mozilla">This page is cool</a></td></tr>
<tr height="10"></tr>
<tr><td class="plaintext">This is a really cool description for my really cool page.</td></tr>
<tr><td class="plaintext">Published: 7/15/15</td></tr>
<tr><td class="plaintext">
</td></tr>
<tr><td class="plaintext">
</td></tr>
<tr><td class="plaintext">
</td></tr>
<tr><td class="plaintext">
</td></tr>
</tbody>
</table>
</body>
Run Code Online (Sandbox Code Playgroud)
蟒蛇代码:
from lxml import html
import requests
page = requests.get('http://127.0.0.1/test_page.html')
tree = html.fromstring(page.text)
description = tree.xpath('//table//td[@class="plaintext"]/text()')
>> print (description)
['This is …Run Code Online (Sandbox Code Playgroud) 我需要检查三个单选按钮之一。我试过这个代码:
//input[@type='radio']/following-sibling::*[contains(., 'Inne akcje')]
Run Code Online (Sandbox Code Playgroud)
但我认为这是错误的方式。
<label class="HoldersInLineLabel">Rodzaj akcji</label>
<input type="radio" ng-model="holdersModel.OperationType" class="prettifiedIeCheckbox ng-valid ng-dirty" value="P" name="01H">
"Przekazanie"
<input type="radio" ng-model="holdersModel.OperationType" value="D" class="prettifiedIeCheckbox ng-valid ng-dirty" name="01I">
"Dekretacja"
<input type="radio" ng-model="holdersModel.OperationType" value="O" class="prettifiedIeCheckbox ng-valid ng-dirty" name="01J">
"Inne akcje"
<span class="k-widget k-dropdown k-header ng-pristine ng-valid" unselectable="on" role="listbox" aria-haspopup="true" aria-expanded="false"...></span>
Run Code Online (Sandbox Code Playgroud) xpath ×10
python ×5
lxml ×3
selenium ×3
web-scraping ×2
xml ×2
exslt ×1
findall ×1
greasemonkey ×1
java ×1
javascript ×1
jmeter ×1
scrapy ×1
tampermonkey ×1
xslt ×1
xslt-1.0 ×1