美文网首页
pyppeteer 定位不到,多半是这个问题。

pyppeteer 定位不到,多半是这个问题。

作者: 盖码范 | 来源:发表于2021-01-26 17:28 被阅读0次

    建议收藏,情况很常见哦!!!

    我们在自动化抓取的时候,常常遇到多层iframe页面嵌套。并且还有子节点嵌套的情况。

    image.png

    然后快速定位

    import pyppeteer
    browser = await pyppeteer.launch({
            'headless': False,  # 关闭无头模式
            # 'devtools': True,  # 打开 chromium 的 devtools
            'executablePath': r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
            'args': [
                '--disable-extensions',
                '--hide-scrollbars',
                '--disable-bundled-ppapi-flash',
                '--mute-audio',
                '--no-sandbox',
                '--disable-setuid-sandbox',
                '--disable-gpu',
                '--disable-infobars',
                # f'--proxy-server={ip}:{port}'  # 代理
            ],
            'dumpio': True,
        })
    
    page = await browser.newPage()
    await page.goto('https://login2.htm')  # 打开网页
    frame = page.frames  # 获取所有的iframe
    
    
    # 多层frame, 快速定位元素所在哪个frame中
    for i, b in enumerate(frame):
        for j in b.childFrames:
            slider = await j.xpath('/html/body/center')
            print(i, slider)
    

    b.childFrames :获取iframe框架的子框架

    效果图

    image.png

    定位到是第二个frame中

    selenium定位

            frame = self.driver.find_elements_by_tag_name("iframe")
            for i, b in enumerate(frame):
                self.driver.switch_to.frame(self.driver.find_elements_by_tag_name("iframe")[i])
                try:
                    slider = self.driver.find_element_by_xpath('//*[@id="module-YrEpAzATZ"]/div/div[4]/div[2]/a/div')
                    print(i, slider)
                except:
                    ...
    
                for num, j in enumerate(self.driver.find_elements_by_tag_name("iframe")):
                    self.driver.switch_to.frame(self.driver.find_elements_by_tag_name("iframe")[num])
                    try:
                        slider = self.driver.find_element_by_xpath('//*[@id="module-YrEpAzATZ"]/div/div[4]/div[2]/a/div')
                        print(i, j, slider)
                    except:
                        ...
                    for fnum, f in enumerate(self.driver.find_elements_by_tag_name("iframe")):
                        self.driver.switch_to.frame(self.driver.find_elements_by_tag_name("iframe")[fnum])
                        try:
                            slider = self.driver.find_element_by_xpath(
                                '//*[@id="module-YrEpAzATZ"]/div/div[4]/div[2]/a/div')
                            print(i, j, f, slider)
                        except:
                            ...
                        self.driver.switch_to.parent_frame()  # 回到父节点
                    self.driver.switch_to.parent_frame()  # 回到父节点
                self.driver.switch_to.parent_frame()  # 回到父节点
    

    相关文章

      网友评论

          本文标题:pyppeteer 定位不到,多半是这个问题。

          本文链接:https://www.haomeiwen.com/subject/evzgzktx.html