你如何使用美丽的汤和 selenium 来刮掉影域中的html?

6uxekuva  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(133)

我正在试着制作一个自动化程序来抓取网站的一部分。但这个网站是用Java脚本做的,而我想要刮掉的网站部分是在一个影子域中。
所以我想我应该使用Selify访问该网站,并使用这段代码来访问卷影DOM中元素

def expand_shadow_element(element):
    shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
    return shadow_root

和使用

driver.page_source

获取该网站的超文本标记语言。但是这段代码并没有向我显示影子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和Selify来从影子域中抓取数据。
另外,如果我想刮掉的部分是

<h3>apple</h3>
<p>1$</p>
<p>red</p>

我想准确地删除该代码,而不是

apple
1$
red
t98cgbkg

t98cgbkg1#

您将在此处使用BeautifulSoup,如下所示:

soup = BeautifulSoup(driver.page_source, 'lxml')
my_parts = soup.select('h3')   # for example
8oomwypt

8oomwypt2#

最有可能的情况是,您需要等待元素在代码中显示,因此需要设置隐式等待或显式等待,然后一旦加载了元素,就可以从该页面获取HTML结果。
Driver.IMPLICLY_WAIT(15)#秒

kkbh8khc

kkbh8khc3#

text = shadow_root.find_element(By. CSS_SELECTOR, "path2").get_attribute('innerHTML')

没有一个答案解决了我的问题,所以我对代码进行了修补,结果奏效了!答案是GET_ATTRIBUTE!

相关问题