获取所有属性";标题「;在python中使用selenium

获取所有属性";标题「;在python中使用selenium,python,selenium,element,Python,Selenium,Element,到目前为止,我使用for循环获取页面上特定路径中的所有元素,使用以下脚本: for username in range(range_for_like): link_username_like = "//article/div[2]/div[2]/ul/div/li[" + str(num) + "]/div/div[1]/div/div[1]/a[contains(@class, 'FPmhX notranslate zsYNt ')]"

到目前为止,我使用for循环获取页面上特定路径中的所有元素,使用以下脚本:

for username in range(range_for_like):

    link_username_like = "//article/div[2]/div[2]/ul/div/li[" + str(num) + "]/div/div[1]/div/div[1]/a[contains(@class, 'FPmhX notranslate zsYNt ')]"
    user = browser.find_element_by_xpath(link_username_like).get_attribute("title")
    num += 1
    sleep(0.3)
但有时我的cpu会超过100%,这并不理想

我的解决方案是使用
find_elements\u by_xpath
查找一行中的所有元素,但这样做时,我不知道如何获取所有“title”属性

我知道每个标题的路径都会改变,
/article/div[2]/div[2]/ul/div/li[“+str(num)+”]/div/div[1]/div/div[1]/a
这就是为什么我不断增加
num
变量的原因,但是我如何在没有周期的情况下使用这个技术呢


就性能而言,获得所有属性的最有效方法是什么?我不介意它是否也需要2分钟或更长时间,这里是如何通过xpath获得所有喜欢您照片的人的方法:

//div[text()='Likes']/..//a[@title]
下面的代码获取前12个liker:

likes = browser.find_elements_by_xpath("//div[text()='Likes']/..//a[@title]")
for like in likes:
    user = like.get_attribute("title")
要获得所有喜欢的内容,你必须滚动,因为你可以获得所有喜欢的内容,然后滚动直到所有喜欢的内容都被加载。要获得总喜欢度,可以使用
//a[contains(,'likes')]/span
xpath并将其转换为整数

要使用javascript
.scrollIntoView()
滚动到最后,最终代码如下所示:

totalLikes = int(browser.find_element_by_xpath("//a[contains(.,'likes')]/span").text)
browser.find_element_by_xpath("//a[contains(.,'likes')]/span").click()

while true:
   likes=browser.find_elements_by_xpath("//div[text()='Likes']/..//a[@title]")
   likesLen = len(likes)
   if (likesLen == totalLikes - 1)
       break
   browser.execute_script("arguments[0].scrollIntoView()", likes.get(likesLen-1))

for like in likes:
    user = like.get_attribute("title")
工作原理:
使用
//div[text()='Likes']
我发现了窗口中包含Likes的唯一div。然后,为了获得所有喜欢的内容,即
li
我使用
/..
选择器转到parent
div
,然后使用
title
属性获取所有
a
。因为所有人都不喜欢立即加载,所以必须向下滚动。为此,我会在单击“喜欢”之前获得“喜欢”总数。然后我滚动到last like(
a[@title]
),强制instagram加载一些数据,直到我得到的总喜欢数不等于喜欢列表。当滚动完成时,我只需在循环和获取标题的同时,将所有喜欢的内容循环到列表中。

您可以。在文本格式驱动程序中共享html。通过xpath(//@title)查找元素;这将返回页面上具有title属性的所有元素,存储在列表中,并使用get_attribute方法对其进行迭代以获取其值……尝试使用CSS path,这比Xpath快。@如果我试图解析的页面是instagram页面,我想获取所有在我的帖子上放置like的人,因此我打开了我的最后一篇帖子,点击like,我有一个留下like的人的列表,这些人的名字在我用
user=browser尝试过的属性
title
@AmitJain中。通过xpath('/@title')查找元素。获取属性(“title”)
,但这并不完美,但让我了解它是如何工作的,因为我想对评论做同样的事情。使用//div[text()='Likes']搜索包含所有Likes的主div?然后你在a标签中得到了属性@title?@alessandrobuffoli我试图在我的回答中解释更多细节,希望你能理解我糟糕的英语。您还可以使用Javascript提供更快速但更复杂的解决方案。感谢您的解释,它非常有用,谢谢!