我正在尝试从此网站https://www.quora.com/profile/Karan-Bansal-3/followers
获取所有followers name
由于整个页面没有立即加载,我每次都在循环中使用它:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
既然我不能一次选择所有元素,我试图使用索引来查找循环中的元素。
people = driver.find_element_by_xpath("//div[@class='pagedlist_item'][i]/*/div[@class='ObjectCard-header']/a[@class='user']")
在这里,您可以看到,我正在尝试使用[i]
进行索引,这显然不起作用并代替它,如果我给[1]或任何数字它运作良好。那么如何逐个选择元素呢。
代码段:
i=1
target = open(filename,'w')
driver.get('https://www.quora.com/profile/Karan-Bansal-3/followers')
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
people = driver.find_element_by_xpath("//div[@class='pagedlist_item'][i]/*/div[@class='ObjectCard-header']/a[@class='user']")
target.write(people.text)
target.write("\n")
i = i+1
答案 0 :(得分:2)
在托管语言中使用字符串连接,以便在构造XPath之前评估i
。否则,[i]
是对i
元素存在的谓词测试。您没有说明您的托管语言是什么,但假设字符串连接是"string" + "string"
:
"//div[@class='pagedlist_item'][" + i + "]/*/div[@class='ObjectCard-header']/a[@class='user']"
另请参阅:How to pass variable parameter into XPath expression?
更新:好的,所以你在Python中托管XPath。
如果您首先通过+
将i
投射到字符串,则可以使用str(i)
进行连接,
"//div[@class='pagedlist_item'][" + str(i) + "]/*/div[@class='ObjectCard-header']/a[@class='user']"
或者您可以使用我提供的链接中使用的format()
:
"//div[@class='pagedlist_item'][{}]/*/div[@class='ObjectCard-header']/a[@class='user']".format(i)
无论哪种方式,将上面构造的XPath表达式放入您对find_element_by_xpath()
的调用中,您的问题应该得到解决。
警告 :请勿将此方法与i
的不受信任的值一起使用,或者您可以将代码打开到XPath injection attacks。
答案 1 :(得分:0)
解决方案是首先将索引转换为字符串。
index = str(i)
people = driver.find_element_by_xpath("//div[@class='pagedlist_item'][" + index + "]/*/div[@class='ObjectCard-header']/a[@class='user']")
i++
答案 2 :(得分:0)
首先使用str(index)将index / i变量转换为字符串,然后 尝试在下面使用:
content = rows.xpath('// div [@ class =“ LookupHelpDesc”] ['+ index +'] // text()')。extract_first()
始终使用单报价。