下面的代碼可以使用,因為我可以使用 Python/Selenium/Firefox 單擊網頁上的按鈕。
網頁上的按鈕
driver.execute_script('''return document.querySelector('dba-app').shadowRoot.getElementById('configRenderer').shadowRoot.querySelector('ing-default-layout-14579').querySelector('dba-overview').shadowRoot.querySelector('ing-feat-agreement-overview').shadowRoot.querySelector('ing-ow-overflow-menu-14587').shadowRoot.querySelector('button')''').click()
但是,有些元素是動態的,并且只要您重新運行腳本,數字就會發生變化。
變化的要素:
- 'ing-default-layout- 14579 '
- 'ing-ow-overflow-menu- 14587 '
我必須怎么做才能繞過動態元素?
uj5u.com熱心網友回復:
一種選擇是尋找在頁面加載中保持相同的其他屬性。例如,給定您的 HTML,您可以執行以下操作:
document.querySelector('#configRenderer') // returns the config renderer element
document.querySelector('[data-tag-name="ing-default-layout"]') // returns the ing-default-layout element
document.querySelector('[data-tag-name="dba-overview]') // returns the dba-overview element
等等。或者您可以使用相同的方法來識別父母或孩子,然后分別導航到孩子或父母。
如果 HTML 還不夠穩定,另一種方法是搜索所有元素,并找到tagName以您需要的元素開頭的元素。
for (const elm of document.querySelectorAll('*')) {
if (elm.tagName.toLowerCase().startsWith('ing-ow-overflow-menu')) {
// do stuff with elm, which is the overflow menu element
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456932.html
標籤:javascript html 硒网络驱动程序 网页抓取 jquery 选择器
