我正在嘗試制作一個自動化程式來抓取網站的一部分。但是這個網站是用javascript制作的,而我要抓取的網站部分是在shadow dom中。
所以我想我應該使用 selenium 去那個網站并使用這段代碼來訪問 shadow dom 中的元素
def expand_shadow_element(element):
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
return shadow_root
并使用
driver.page_source
獲取該網站的 HTML。但是這段代碼沒有向我顯示 shadow dom 內的元素。
我已經嘗試將這兩者結合起來并嘗試過
root1 = driver.find_element(By. CSS_SELECTOR, "path1")
shadow_root = expand_shadow_element(root1)
html = shadow_root.page_source
但我得到了
AttributeError: 'ShadowRoot' object has no attribute 'page_source'
回應。所以我認為我需要使用 BeautifulSoup 從該頁面抓取資料,但我不知道如何結合 BeautifulSoup 和 Selenium 從影子 dom 抓取資料。
PS如果我要刮的部分是
<h3>apple</h3>
<p>1$</p>
<p>red</p>
我想準確地抓取該代碼,而不是
apple
1$
red
uj5u.com熱心網友回復:
您將在此處使用 BeautifulSoup,如下所示:
soup = BeautifulSoup(driver.page_source, 'lxml')
my_parts = soup.select('h3') # for example
uj5u.com熱心網友回復:
您很可能需要等待一個元素在代碼中顯示,因此您需要設定隱式等待或顯式等待,然后一旦加載了一個元素,您就可以為該頁面提供 HTML 結果。
driver.implicitly_wait(15) #in 秒
uj5u.com熱心網友回復:
text = shadow_root.find_element(By. CSS_SELECTOR, "path2").get_attribute('innerHTML')
沒有一個答案能解決我的問題,所以我修改了代碼,這很有效!答案是get_attribute!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/523633.html
上一篇:在Python中使用BeautifulSoup抓取網站
下一篇:使用動態生成的資料抓取網站
