gpt4 book ai didi

ruby - xpath 的结果是对象文本错误,我如何在围绕隐藏所有内容构建的网站上使用 Ruby 解决这个问题?

转载 作者:太空宇宙 更新时间:2023-11-03 16:15:27 25 4
gpt4 key购买 nike

我的公司使用多种方法来隐藏他们网站上的大部分数据,我正在尝试创建一个驱动程序来扫描已关闭的作业以填充数组以创建新作业,因此不需要用户输入/用户访问数据库。

我做了研究,但似乎无法按照我的方式完成:

# 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 &amp;&amp; 
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

然后获取 innerTextSPAN

<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”。因此,您使用定位器找到 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]

关于ruby - xpath 的结果是对象文本错误,我如何在围绕隐藏所有内容构建的网站上使用 Ruby 解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46270794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com