获取所有属性";标题「;在python中使用selenium
到目前为止,我使用for循环获取页面上特定路径中的所有元素,使用以下脚本:获取所有属性";标题「;在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 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
我使用/..
选择器转到parentdiv
,然后使用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提供更快速但更复杂的解决方案。感谢您的解释,它非常有用,谢谢!