pyppeteer を使用すると、開いているすべてのタブを.pages関数で取得できます。これは、ウェブサイトがそれ自体で新しいタブを開くまで (たとえば、ボタンをクリックした後) 正常に機能しています。この場合、新しいタブは **.pages* の戻り値にリストされません。
この新しいタブを検出して、他のタブ/ページと同じように操作できるようにする方法はありますか?
(操り人形師ではテストしていませんが、同じように動作すると思います。)
コード例 (残念ながら Python 2.7 を使用する必要があるため、yield from を使用する必要があります):
self.browser = yield from launch(appMode=True, closeAtExit=False)
pages = yield from self.browser.pages()
self.page = pages[len(pages) - 1] # Open w3schools in the init tab
yield from self.page.goto("https://www.w3schools.com/tags/att_a_target.asp")
link = yield from self.page.waitForSelector('a.w3-btn:nth-child(4)')
yield from link.click()
yield from asyncio.sleep(5) # Just to give some extra time...
pages1 = yield from self.browser.pages()
self.log.info("Count: " + str(len(pages1))) # Should be 2 now
for mpage in pages1:
self.log.info("URL: " + str(mpage.url))
出力:
TARGETS: {'246562630E35EEAD0384B80658C827F8': <pyppeteer.target.Target object at 0x03482F10>}
TARGETS: {'246562630E35EEAD0384B80658C827F8': <pyppeteer.target.Target object at 0x03482F10>}
INFO:__main__:Count: 1
INFO:__main__:URL: https://www.w3schools.com/tags/att_a_target.asp
INFO:__main__:Done!