【问题标题】:xpath for first post on instagram profile not working (python, selenium, chromedriver)第一篇关于 instagram 配置文件的 xpath 不起作用(python、selenium、chromedriver)
【发布时间】:2020-03-29 16:44:20
【问题描述】:

在导航到任何 Instagram 个人资料后,我试图点击第一个帖子。我查看了多个 Instagram 用户个人资料的第一篇帖子的xpath,它们似乎都是一样的。这是一个梅西的个人资料示例。

这是我尝试使用带有python的chromedriver点击梅西的第一篇文章。我已经导航到https://www.instagram.com/leomessi/,这是梅西的个人资料。

first_post_elem_click = driver.find_element_by_path('//*[@id="react-root"]/section/main/div/div[4]/article/div[1]/div/div[1]/div[1]/a/div').click()

但是,第一个帖子没有被点击。非常感谢任何帮助。

【问题讨论】:

    标签: python selenium selenium-chromedriver instagram


    【解决方案1】:

    请检查以下解决方案,

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    
    Browser = webdriver.Chrome(executable_path=r"chromedriver.exe")
    
    Browser.get("https://www.instagram.com/leomessi/")
    
    WebDriverWait(Browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//body//div[contains(@class,'_2z6nI')]//div//div//div[1]//div[1]//a[1]//div[1]//div[2]"))).click()
    

    【讨论】:

    • 太棒了!!你能从你的最后按下upvote按钮吗?
    • 是的,我就是这么做的。我刚加入,所以这里说不会显示,但是已经录好了。
    • 你能解释一下你是如何确定这个 xpath 的吗?将不胜感激解释,所以我可以尝试自己未来的实施。我在尝试点击下一个按钮时遇到了类似的问题。
    • 好的...实际上,当您启动 URL 时,它非常简单,然后您在 body 下有 body 标签,我们需要检查帖子,所以我选择了具有 _2z6nI 的 div。之后,我只是简单地水平和垂直地避免了空白 div,然后选择了第一个 div
    • 感谢您花时间解释。 _2z6nl 类是有道理的。这是从哪里来的://div//div//div[1]//div[1]//a[1]//div[1]//div[2]?例如,我将如何更改它以点击第二个帖子和第三个帖子等?我是 html 新手。
    【解决方案2】:

    您应该使用相对 xpath,而不是使用绝对 xpath。
    您可以使用以下命令单击第一篇文章(也已应用显式等待):

    WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "(//div[@class='Nnq7C weEfm']//img)[1]"))).click()
    

    您需要添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

    【讨论】:

    • 您好,感谢您的帮助。我试过这个,但它也没有工作:(
    【解决方案3】:

    我刚刚在 Firefox 中检查了这个:$x('//*[@id="react-root"]/section/main/div/descendant::article/descendant::a[1]')。我想,这应该能满足你的需求。

    【讨论】:

    • 谢谢。您是否建议:driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/descendant::article/descendant::a[1]').click() 这没有要么工作:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2016-04-20
    • 2018-02-09
    • 2018-09-27
    • 2017-04-27
    • 2018-12-29
    相关资源
    最近更新 更多