如何在XPath表达式中使用Python变量?

如何在XPath表达式中使用Python变量?,python,xml,xpath,Python,Xml,Xpath,我正试图从这个网站上获取所有追随者的名字 因为整个页面不是一次加载的,所以我每次都在循环中使用这个: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 现在,因为我不能一次选择所有元素,所以我尝试使用索引来查找循环中的元素 people = driver.find_element_by_xpath("//div[@class='pagedlist_item'][i]/*/div[@class='Ob

我正试图从这个网站上获取所有
追随者的名字

因为整个页面不是一次加载的,所以我每次都在循环中使用这个:

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

在宿主语言中使用字符串连接,以便在构造XPath之前计算
i
。否则,
[i]
是一个谓词,用于测试
i
元素是否存在。您没有说明宿主语言是什么,但假设字符串连接是
“string”+“string”

另见:


更新:好的,您正在用Python托管XPath

如果您首先通过
str(i)
i
强制转换为字符串,则可以使用
+
连接上述内容

或者您可以使用我提供的链接中使用的
format()

 "//div[@class='pagedlist_item'][{}]/*/div[@class='ObjectCard-header']/a[@class='user']".format(i)
无论采用哪种方式,都可以将上述构造的XPath表达式放入对
find\u element\u by\u XPath()
的调用中,您的问题应该得到解决


注意:不要对
i
的不可信值使用此方法,否则您可以将代码打开。

在宿主语言中使用字符串连接,以便在构建XPath之前对
i
进行评估。否则,
[i]
是一个谓词,用于测试
i
元素是否存在。您没有说明宿主语言是什么,但假设字符串连接是
“string”+“string”

另见:


更新:好的,您正在用Python托管XPath

如果您首先通过
str(i)
i
强制转换为字符串,则可以使用
+
连接上述内容

或者您可以使用我提供的链接中使用的
format()

 "//div[@class='pagedlist_item'][{}]/*/div[@class='ObjectCard-header']/a[@class='user']".format(i)
无论采用哪种方式,都可以将上述构造的XPath表达式放入对
find\u element\u by\u XPath()
的调用中,您的问题应该得到解决


注意:不要对
i
的不可信值使用此方法,否则您可以将代码打开到。

解决方案是首先将索引转换为字符串

index = str(i)
people = driver.find_element_by_xpath("//div[@class='pagedlist_item'][" + index + "]/*/div[@class='ObjectCard-header']/a[@class='user']")
i++

解决方案是首先将索引转换为字符串

index = str(i)
people = driver.find_element_by_xpath("//div[@class='pagedlist_item'][" + index + "]/*/div[@class='ObjectCard-header']/a[@class='user']")
i++

首先使用str(index)将index/i变量强制转换为字符串,然后 请尝试使用以下命令:

content=rows.xpath('//div[@class=“lookupancelpdesc”]['+index+]///text())。首先提取()


始终使用单引号。

首先使用str(index)将index/i变量转换为字符串,然后 请尝试使用以下命令:

content=rows.xpath('//div[@class=“lookupancelpdesc”]['+index+]///text())。首先提取()


始终使用single引号。

是否将变量“i”替换为其值?@derloopkat我已经证明
i
最初是1,我知道XPATH没有使用变量
[i]
,那么如何选择它呢?因为我需要所有元素,而且只能在一个循环中进行,该循环会增加值,索引也会增加。您是否要用它的值替换变量“I”?@derloopkat我已经表明,
I
最初是1,我知道XPATH没有使用变量
[I]
,那么如何选择它呢?因为我需要所有元素,并且只能在循环中完成,循环将增加值,索引也将增加。这是非常基本的,如果您使用的是Phyton,那么请检查如何在范围内执行for。为您更新Python的答案。这是非常基本的,如果您使用的是Phyton,那么请检查如何在范围内执行for。为您更新Python的答案。