我正在试着制作一个自动化程序来抓取网站的一部分。但这个网站是用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
3条答案
按热度按时间t98cgbkg1#
您将在此处使用BeautifulSoup,如下所示:
8oomwypt2#
最有可能的情况是,您需要等待元素在代码中显示,因此需要设置隐式等待或显式等待,然后一旦加载了元素,就可以从该页面获取HTML结果。
Driver.IMPLICLY_WAIT(15)#秒
kkbh8khc3#
没有一个答案解决了我的问题,所以我对代码进行了修补,结果奏效了!答案是GET_ATTRIBUTE!