请帮忙。我正在尝试从网站获取数据,然后计算某些文本的出现次数。不幸的是,我无法提供实际的网站,但基本知识就是这样。
加载了网页,并向我提供了一个位于表中的值列表(下面的代码反映了这一点)。该页面将如下所示。
标头
表格1
A00001
A00002
A00003
A00004
......
A00500
上面的每行(A00001- A00500)代表表格我需要单击的链接。此外,每个链接都指向一个唯一的页面,我需要从该页面中提取信息。
我正在使用硒来获取信息并将其存储为变量数据,如下面的代码所示。不过,这是我的问题-我需要单击的链接/行数取决于用户在GUI中选择的时间范围。正如您从我的代码中看到的那样,从2011年5月1日到2011年5月30日的时间范围产生了我需要单击的184个不同链接的列表。
fromseleniumimportseleniumimportunittest,time,reclassUntitled(unittest.TestCase):defsetUp(self):self.verificationErrors=[]self.selenium=selenium("localhost",4444,"*chrome","https://www.example.com")self.selenium.start()deftest_untitled(self):sel=self.selenium
sel.open("https://www.example.com")sel.click("link=Reports")sel.wait_for_page_to_load("50000")sel.click("link=Cases")sel.wait_for_page_to_load("50000")sel.remove_selection("office","label=")sel.add_selection("office","label=San Diego")sel.remove_selection("chapter","label=")sel.add_selection("chapter","label=9")sel.add_selection("chapter","label=11")sel.type("StartDate","5/1/2011")sel.type("EndDate","5/30/2011")sel.click("button1")sel.wait_for_page_to_load("30000")Case1=sel.get_table("//div[@id='cmecfMainContent']/center[2]/table.1.0")Case2=sel.get_table("//div[@id='cmecfMainContent']/center[2]/table.2.0")Case3=sel.get_table("//div[@id='cmecfMainContent']/center[2]/table.184.0")deftearDown(self):self.selenium.stop()self.assertEqual([],self.verificationErrors)
如果名称==“main”:unittest.main()
我对两件事感到困惑。
1)什么是最好的方式来使硒单击页面上的所有链接,而无需提前知道链接的数量?我知道如何执行此操作的唯一方法是让用户在GUI中选择链接数,该链接数将分配给变量,然后可将其包含在以下方法中:
number_of_links = input(“页面上有多少个链接?”)sel.get_table(“ // div [@ id ='cmecfMainContent'] / center [2] / number_of_links”)
2)我也对如何计算链接指向的页面上出现的某些数据的出现次数感到困惑。
即
A00001导致包含表值“ Apples”的页面
A00002导致包含表值“ Oranges”的页面
A00003导致包含表值“ Apples”的页面
我知道硒可以将它们存储为变量,但是我不确定是否可以将它们另存为序列类型,每增加一次出现都会添加到原始列表中(或添加到字典中),然后可以用len()函数计数。
谢谢你的帮助
解决方案
我不熟悉python api,对此感到抱歉,但是在java中,我知道使用xpath可以获取xpath的出现次数。因此,您可以编写一个xpath选择器来查找所需的元素,然后获取该路径的出现次数。
然后单击每个,您可以在xpath上附加一个像[1]这样的元素选择器,以便您的xpath//somexpath/something do //somexpath/something[1]得到第一个。
希望能有所帮助
这是一个例子:我在Java中编写了一个糟糕的api,以便能够对xpath匹配集合进行类似jquery的操作。我的构造函数匹配xpath获取计数,然后创建所有匹配项的列表,因此我可以执行.clickAll()之类的操作
publicSelquerySelector(Stringselector,Seleniumselenium){super("xpath=("+selector+")["+1+"]",selenium);this.xpath=selector;this.selenium=selenium;//find out how many elements match
this.length=selenium.getXpathCount(this.xpath).intValue();//make an array of selectedElementsfor(int i=2;i<=this.length;i++){elements.add(newSelquerySelectedElement("xpath=("+this.xpath+")["+i+"]",this.selenium));}}
继承完整的代码,以备不时之需:
因此,我想回答您的问题(不知道xpath如何与表匹配),您可能会做类似的事情
//div[@id='cmecfMainContent']/center[2]/table并获取匹配数以获取链接总数,然后进行循环。如果您无法使用xpath做到这一点,请继续假设它们是另一个链接,直到您被接受为止
foriinrange(1,xpathmatchcount):Case[i]=sel.get_table("//div[@id='cmecfMainContent']/center[2]/table."+i+".0")
站长简介:前每日优鲜python全栈开发工程师,自媒体达人,逗比程序猿,钱少话少特宅,关注我,做朋友, 我们一起谈人生和理想吧!我的公众号:想吃麻辣香锅
关注公众号回复充值+你的账号,免费为您充值1000积分