提问人:Daniel 提问时间:9/18/2017 最后编辑:Daniel 更新时间:9/19/2017 访问量:355
xpath的结果是对象文本错误,我如何在一个围绕隐藏所有内容而构建的网站上在Ruby中解决这个问题?
Result of xpath is object text error, how do i get around this in Ruby on a site built around hiding everything?
问:
我的公司使用方法来隐藏其网站上的大多数数据,我正在创建一个驱动程序,该驱动程序将扫描已关闭的作业以填充数组以创建新作业,因此用户不需要用户输入/数据库访问权限。
我做了研究,似乎这不能像我现在那样做:
# Scan page and place 4 different Users into an array
String name = [nil, nil, nil, nil]
String compare_name = nil
c = 0
tr = 1
while c < 4
String compare_name = driver.find_element(:xpath, '//*
[@id="job_list"]/tbody/tr['+tr.to_s+']/td[2]/span[1]/a/span/text()[2]').gets
if compare_name != name[c]
name[c] = compare_name
c = +1
tr = +1
else if compare_name == name[c]
tr = +1
end
end
end
此外,我是一个边走边学的新手,所以这可能不是最佳选择,或者我学会了如何做我想做的事。
现在,屏幕上我想要的项目的网站代码:
<span ng-if="job.customer.company_name != null &&
job.customer.company_name != ''" class="pointer capitalize ng-scope" data-
toggle="tooltip" data-placement="top" title="" data-original-title="406-962-
5835">
<a href="/#/edit_customer/903519"class="capitalize notranslate">
<span class="ng-binding">Name Stuff<br>
<!-- ngIf: ::job.customer.is_cip_user --
<i ng-if="::job.customer.is_cip_user" class="fa fa-user-circle-o ng-scope">
::before == $0
</i>
> Diago Stein</span>
</a>
</span>
Xpath 可以找到 Diago Stein 区域,但由于它是文本对象,因此它不起作用。现在要注意的是,所有类标题、按钮名称等都与页面上的其他所有内容相同。他们总是这样做,这使得扫描变得更加困难,因为同样的东西可能在其他地方,可能与网站的这个区域没有任何关系。
有没有办法在不知道基于 HTML 的文本区域中可能有什么的情况下抓取此文本?注意,“Name Stuff”是一家公司的名称,为了保护隐私,我用这个通用名称隐藏了它。
感谢您的任何想法或建议和帮助。
编辑:澄清一下,我不会知道公司名称或用户名(在本例中为 Diago Stein),这部分代码的全部目的是在关闭页面上用此表中的客户名称填充一个数组。
答:
您可以将 XPath 备份到一个级别
//*[@id="job_list"]/tbody/tr[' + tr.to_s + ']/td[2]/span[1]/a/span
然后抓取 .是innerText
SPAN
<span class="ng-binding">Name Stuff<br>
<!-- ngIf: ::job.customer.is_cip_user --
<i ng-if="::job.customer.is_cip_user" class="fa fa-user-circle-o ng-scope">
::before == $0
</i>
> Diago Stein</span>
问题是这个HTML中有一些条件,这使得它难以阅读,很难弄清楚实际存在什么。如果我们去掉有条件的,我们就剩下了
<span class="ng-binding">Name Stuff<br>Diago Stein</span>
如果我们接受这个,我们得到innerText
Name Stuff
Diago Stein
这样做的目的是您可以通过回车符拆分字符串,第 0 部分是“Name Stuff”,第 1 部分是“Diago Stein”。因此,您使用定位器找到 , get ,将其拆分为回车符,然后获取第二部分,您就有了所需的字符串。SPAN
innerText
此代码未经过测试,但应类似于
name = driver.find_element(:xpath => "//*[@id="job_list"]/tbody/tr[' + tr.to_s + ']/td[2]/span[1]/a/span").get_text.split("\n")[1]
评论
SPAN
评论