gpt4 book ai didi

html - Selenium driver.page_source() 仅提取部分 HTML DOM

转载 作者:行者123 更新时间:2023-12-05 05:43:29 24 4
gpt4 key购买 nike

我有一个网页,当我右键单击它然后查看页面源时,我得到:SECTION-A

但是当我点击它然后检查我得到更长的输出时,我尝试使用 JS 获取页面源但同样的问题,我在 SECTION-A 中获取输出...我该如何解决这个问题?

注意:我正在寻找通用解决方案,而不仅仅是针对这个特定网站。

我尝试过的:

time.sleep(3)
html1 = driver.execute_script("return document.documentElement.outerHTML")
html2 = driver.execute_script("return document.getElementsByTagName('html')[0].innerHTML")
html3 = driver.page_source()

我正在使用 chrome,是否有针对此问题的标志或解决方案?


A 部分:

<head><script language="javascript" type="text/javascript">
var framePara = new Array(
0,
"main.htm",
1,
0,0 );
</script>
<script language="javascript" type="text/javascript">
var indexPara = new Array(
"192.168.0.1",
1742822853,
"tplinklogin.net",
0,0 );
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<title>TL-WR845N</title>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="wed, 26 Feb 1997 08:21:57 GMT">
<link href="../dynaform/css_main.css" rel="stylesheet" type="text/css">
<script language="javascript" src="../dynaform/common.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript"><!--
//--></script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" src="../localiztion/char_set.js" type="text/javascript">
</script><script type="text/javascript">
var startUrl = "";
var startHelpUrl = "";
if(framePara[0] == 1)
{
startUrl = "../userRpm/WzdStartRpm.htm";
startHelpUrl = "../help/WzdStartHelpRpm.htm";
}
else
{
startUrl = "../userRpm/StatusRpm.htm";
/*changed by ZQQ, 2015.7.25, corresponding to function StatusRpmHtm*/
if (framePara[2] == 0x08 || framePara[2] == 0x07 || framePara[2] == 0x06 || framePara[2] == 0x03)
{
startHelpUrl = "../help/StatusHelpRpm_AP.htm";
}
else if (framePara[2] == 0x04)
{
startHelpUrl = "../help/StatusHelpRpm_APC.htm";
}
else
{
startHelpUrl = "../help/StatusHelpRpm.htm";
}
}
document.write("<FRAMESET rows=90,*>");
document.write("<FRAME name=topFrame marginWidth=0 marginHeight=0 src=\"../frames/top.htm\" noResize scrolling=no frameSpacing=0 frameBorder=0 id=\"topFrame\">");
document.write("<FRAMESET cols=182,55%,*>");
document.write("<FRAME name=bottomLeftFrame marginWidth=0 marginHeight=0 src=\"../userRpm/MenuRpm.htm\" noResize frameBorder=1 scrolling=auto style=\"overflow-x:hidden\" id=\"bottomLeftFrame\">");
document.write("<FRAME name=mainFrame marginWidth=0 marginHeight=0 src=" +startUrl+" frameBorder=1 id=\"mainFrame\">");
document.write("<FRAME name=helpFrame marginWidth=0 marginHeight=0 src="+startHelpUrl+" frameBorder=1 id=\"helpFrame\">");
document.write("</FRAMESET>");
</script></head>



<frameset rows="90,*"><frame name="topFrame" marginwidth="0" marginheight="0" src="../frames/top.htm" noresize="" scrolling="no" framespacing="0" frameborder="0" id="topFrame"><frameset cols="182,55%,*"><frame name="bottomLeftFrame" marginwidth="0" marginheight="0" src="../userRpm/MenuRpm.htm" noresize="" frameborder="1" scrolling="auto" style="overflow-x:hidden" id="bottomLeftFrame"><frame name="mainFrame" marginwidth="0" marginheight="0" src="../userRpm/StatusRpm.htm" frameborder="1" id="mainFrame"><frame name="helpFrame" marginwidth="0" marginheight="0" src="../help/StatusHelpRpm.htm" frameborder="1" id="helpFrame"></frameset>

<noframes>
<body id="t_noFrame">Please upgrade to a version 4 or higher browser so that you can use this setup tool.</body>
</noframes>


</frameset>

最佳答案

通过查看源代码和通过检查器工具显示的 WebElements 可能存在实质性差异。这两种方法都是两种不同的浏览器功能,使我们能够查看 DOM Tree .然而它们之间的核心区别是:

  • 查看源代码 显示从 AUT(正在测试的应用程序)传送到浏览器的 HTML。
  • Inspect element 是一个开发人员工具,例如Chrome DevTools查看 HTML DOM 的状态在浏览器应用了它的纠错之后以及在任何 Javascript 操作了 DOM 之后。简而言之,使用查看源代码,您将看到Javascript 而不是HTML。 HTML 错误可能会在Inspect Elements 工具中得到纠正。

因此,使用 Inspect 您会看到更大的输出。

You can find a relevant detailed discussion in Get web elements as they shown through view source


解决方案

page_source是使用 Selenium 提取页面源代码的最有效和经过验证的方法之一。但是,有一个陷阱。你需要诱导 WebDriverWait对于visibility_of_element_located()网页中的 static 元素。例如,要提取网页 https://example.compage_source 您可以为 <h1> 引入WebDriverWait 标记 innerText 为 Example Domain 如下所示可见:

  • 使用 XPATH:

    driver.get("https://example.com")     
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h1[text()='Example Domain']")))
    print(driver.page_source())
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC

关于html - Selenium driver.page_source() 仅提取部分 HTML DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71812451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com