Python边缘驱动程序Web自动化帮助-找不到Xpath

Python边缘驱动程序Web自动化帮助-找不到Xpath,python,pycharm,microsoft-edge,Python,Pycharm,Microsoft Edge,我是Python新手,正在学习如何自动化网页。我在“基础”下介绍了如何使用“检查元素”选项卡下的不同定位器来驱动代码 我已经写了一些基本的代码来跳过youtube广告,但是我一直在寻找正确的页面元素来同意youtube中的隐私政策弹出框。我使用ChroPath尝试查找页面的xpath,但似乎没有。我找不到任何其他页面元素,我想知道是否有人对我如何自动点击“我同意”按钮有任何想法 Python代码: from msedge.selenium_tools import Edge, EdgeOptio

我是Python新手,正在学习如何自动化网页。我在“基础”下介绍了如何使用“检查元素”选项卡下的不同定位器来驱动代码

我已经写了一些基本的代码来跳过youtube广告,但是我一直在寻找正确的页面元素来同意youtube中的隐私政策弹出框。我使用ChroPath尝试查找页面的xpath,但似乎没有。我找不到任何其他页面元素,我想知道是否有人对我如何自动点击“我同意”按钮有任何想法

Python代码:

from msedge.selenium_tools import Edge, EdgeOptions

options = EdgeOptions()
options.use_chromium = True
driver = Edge(options=options)

driver.get('http://www.youtube.com')

def agree():
    while True:
        try:
            driver.find_element_by_xpath('/html/body/ytd-app/ytd-popup-container/paper-dialog/yt-upsell-dialog-renderer/div/div[3]/div[1]/yt-button-renderer/a/paper-button').click()
            driver.find_elements_by_xpath('.<span class="RveJvd snByac">I agree</span>').click()
        except:
            continue

if __name__ == '__main__':
    agree()
从msedge.selenium_工具导入边缘、边缘选项
选项=EdgeOptions()
options.use_=True
驱动程序=边缘(选项=选项)
司机,上车http://www.youtube.com')
def agree():
尽管如此:
尝试:
驱动程序。通过xpath('/html/body/ytd app/ytd popup container/paper dialog/yt upsell dialog renderer/div/div[3]/div[1]/yt button renderer/a/paper button')查找元素。单击()
驱动程序。通过xpath('.I agree')查找元素。单击()
除:
持续
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
同意

Youtube Inspect元素Screeshot如下:

我不知道代码中的xpath是否正确,因为我看不到页面的整个html结构。但您可以使用Edge中的F12开发工具查找xpath,并检查找到的xpath是否正确:

  • 打开要自动执行的页面,并在Edge中打开F12开发工具
  • 使用Ctrl+Shift+C并单击要查找的元素,然后查找该元素的html代码
  • 右键单击html代码并选择复制->复制XPath
  • 然后可以尝试使用复制的xpath
  • 此外,
    find\u elements\u by\u xpath(xpath)
    将返回一个包含元素的列表(如果找到)。我认为您需要指定要单击列表中的哪一个元素。您需要像这样传入元素列表的值编号
    [x]
    ,例如:

    driver.find_elements_by_xpath('.<span class="RveJvd snByac">I agree</span>')[0].click()
    
    driver.find\u elements\u by_xpath('.I agree')[0]。单击()
    
    我不知道代码中的xpath是否正确,因为我看不到页面的整个html结构。但您可以使用Edge中的F12开发工具查找xpath,并检查找到的xpath是否正确:

  • 打开要自动执行的页面,并在Edge中打开F12开发工具
  • 使用Ctrl+Shift+C并单击要查找的元素,然后查找该元素的html代码
  • 右键单击html代码并选择复制->复制XPath
  • 然后可以尝试使用复制的xpath
  • 此外,
    find\u elements\u by\u xpath(xpath)
    将返回一个包含元素的列表(如果找到)。我认为您需要指定要单击列表中的哪一个元素。您需要像这样传入元素列表的值编号
    [x]
    ,例如:

    driver.find_elements_by_xpath('.<span class="RveJvd snByac">I agree</span>')[0].click()
    
    driver.find\u elements\u by_xpath('.I agree')[0]。单击()
    
    在检查页面元素时,我忽略了iframe的元素。在做了一些挖掘之后,我发现我必须告诉Selenium驱动程序从主页切换到iframe。我添加了以下代码,现在自动单击“我同意”按钮:

    frame\u element=驱动程序。通过\u id('iframe')查找\u element\u 驱动程序。切换到。帧(帧元素) agree2=driver。通过xpath(“html/body/div/c-wiz/div[2]/div/div/div/div/div[2]/form/div/span/span”)查找元素。单击()
    在检查页面元素时,我忽略了iframe的元素。在做了一些挖掘之后,我发现我必须告诉Selenium驱动程序从主页切换到iframe。我添加了以下代码,现在自动单击“我同意”按钮:

    frame\u element=驱动程序。通过\u id('iframe')查找\u element\u 驱动程序。切换到。帧(帧元素) agree2=driver。通过xpath(“html/body/div/c-wiz/div[2]/div/div/div/div/div[2]/form/div/span/span”)查找元素。单击()
    driver.switch\u to.default\u content()

    谢谢。我已经尝试过这样做,但是我复制的xpath不起作用,这就是为什么我尝试使用Chropath,它声明它们在该页面元素下不是有效的xpath。我试图找到另一种自动点击按钮的方法。有一种使用屏幕坐标的方法,但我不确定这是否是最好的方法?我认为最好的方法是通过id、名称或xpath查找元素。但是如果不能用这种方法,你可以试试屏幕坐标法。太好了!您还可以将您的解决方案作为答案,并将您的答案标记为已接受的答案。它可以在将来帮助其他社区成员解决类似的问题。谢谢你的理解。我做了更多的挖掘,选择提到的元素的另一种方法是使用switch-to-iframe方法。因为我是Python新手,所以不熟悉这个方法。谢谢。我已经尝试过这样做,但是我复制的xpath不起作用,这就是为什么我尝试使用Chropath,它声明它们在该页面元素下不是有效的xpath。我试图找到另一种自动点击按钮的方法。有一种使用屏幕坐标的方法,但我不确定这是否是最好的方法?我认为最好的方法是通过id、名称或xpath查找元素。但是如果不能用这种方法,你可以试试屏幕坐标法。太好了!您还可以将您的解决方案作为答案,并将您的答案标记为已接受的答案。它可以在将来帮助其他社区成员解决类似的问题。谢谢你的理解。我做了更多的挖掘,选择提到的元素的另一种方法是使用switch-to-iframe方法。因为我是Python新手,所以不熟悉这种方法。