Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 硒:如何在<;脚本src=";xx.js“&燃气轮机;[python]_Javascript_Python_Selenium_Google Colaboratory - Fatal编程技术网

Javascript 硒:如何在<;脚本src=";xx.js“&燃气轮机;[python]

Javascript 硒:如何在<;脚本src=";xx.js“&燃气轮机;[python],javascript,python,selenium,google-colaboratory,Javascript,Python,Selenium,Google Colaboratory,我想在google colaboratory中使用selenium执行find_element_by_class_name 显示了以下错误 NoSuchElementException:消息:没有这样的元素:无法找到元素 我发现这个页面是在执行print(driver.page\u source)后由javascript生成的 虽然我尝试了通过xpath查找元素,但结果是一样的。很抱歉上次评论的回复太晚,我想在您上次评论之后我现在知道您的问题了 #执行此操作后,它将打开一个新选项卡 驱动程序。按

我想在google colaboratory中使用selenium执行
find_element_by_class_name

显示了以下错误

NoSuchElementException:消息:没有这样的元素:无法找到元素

我发现这个页面是在执行
print(driver.page\u source)
后由javascript生成的


虽然我尝试了通过xpath查找元素,但结果是一样的。

很抱歉上次评论的回复太晚,我想在您上次评论之后我现在知道您的问题了

#执行此操作后,它将打开一个新选项卡
驱动程序。按\u id(“openGraphPage”)查找\u元素。\u。单击()
让我们调用第一个选项卡
tab0
和新选项卡
tab1

单击打开新选项卡后,即使您看到当前选项卡是
tab1
,Selenium驱动程序仍然关注
tab0
!这就是为什么当您执行
打印(driver.page\u source)
时,它不会显示您在
选项卡1
中看到的任何元素,因此您无法找到您的元素

要在打开新选项卡后切换选项卡,您需要执行以下操作:

#首先获取所有窗口句柄(选项卡ID)
window\u list=driver.window\u句柄
tab0=窗口列表[0]
tab1=窗口列表[1]
#切换到新选项卡
驾驶员。切换到。车窗(表1)
#在这里做你的事
graph=驱动程序。通过类名称(“graph”)查找元素
# ...
#如果您需要返回主选项卡(即使关闭tab1,您仍然需要切换回主选项卡)
驱动程序。切换到。窗口(选项卡0)

注:

我不太清楚为什么当你做
driver.get(r'https://example.com/graph“)
,它找不到您的元素。因为即使您不切换选项卡,如果您切换了
driver.get
,第一个选项卡也应该正常获取图形

由于我没有访问该网站的权限,我猜测:

  • 直接执行
    driver.get(r'https://example.com/graph“)
    将不会加载图形。它需要单击“打开图形”按钮,它将包含一些参数以在新选项卡中加载图形。-->如果这是原因,你没有别的办法,只能点击按钮打开图表,然后切换到新标签页,在那里完成你的工作
  • 单击在新选项卡中打开页面后,您将直接在第一个选项卡中获得页面,但是如果页面没有聚焦,则页面不会正常加载(很多javascript站点都会出现这种情况)。这就是为什么你找不到你的元素。但是,如果您使用Chrome进行正常调试,则会聚焦页面,从而加载。-->如果这是原因,你可以简单地切换到这个标签页,聚焦它。它将加载图形,您可以获取您的元素
我很乐意为你提供更多帮助,但我没有访问该网站的权限,所以我只能左右猜测


小贴士:

尽量不要使用时间。睡眠,而要使用明确的时间。当它找到您的元素时,它将停止等待,这样您就不会浪费时间。当达到超时时,它仍将引发NoTouchElement

从selenium导入webdriver
从selenium.webdriver.common.by导入
从selenium.webdriver.support.ui导入WebDriverWait
从selenium.webdriver.support将预期的_条件导入为EC
元素=WebDriverWait(驱动程序,10)。直到(
EC.所处元素的可见性((By.CLASS\u名称,“图形”))
)

进一步文档:

您是否添加了睡眠或显式等待并尝试了?@PDHide谢谢您的评论。是的,我添加了
time.sleep(3)
请添加html,看看元素是否在里面iframe@PDHide我添加了html。恐怕这个页面没有使用iframe。。。。我错过了什么?在html页面上找不到类“Graph”…感谢您的深入解释,@jackblk。虽然我不能做我想做的事,但我可以向前迈出一步。因为我被重定向到不支持浏览器的url。。。即使我使用
chromedriver
作为Selenium,Selenium也可能无法作为Chrome工作。。。但我认为你的答案是有效的。谢谢!!你试过Firefox吗?将代码切换到firefox很容易。很高兴它帮助了你:)。
    <body>
        <script src="../public/vendor.bundle.js"></script>
        <script src="../public/bundle.js"></script>
    </body>
<!doctype html>
<html>
    <head>
        <title>xxx</title>

        <link rel="shortcut icon" href="../public/favicon.ico" />
        <link rel="stylesheet" type="text/css" href="../public/bundle.css">

        <script type="text/javascript">

            var contextPath = "/xxx";

            if(location.pathname.match(/(.*)(\/\S*\/\S*)/)){
                contextPath = RegExp.$1;
            }

            window.raise = window.raise || {};
            window.raise.appInfo = {
                "xxx" :  'xxx',
                "xxx" : xxx,
                .
                .
                .
            };
        </script>
    </head>
    <body>
        <div id="app-progress" class="AppInitializing"></div>
        <div id="root">

            <noscript>
                <p class="xxx">xxx</p>
            </noscript>
        </div>

        <script src="../public/vendor.bundle.js"></script>
        <script src="../public/bundle.js"></script>
    </body>
    
    
</html>

.
.
<div class="main-body-wrapper">
    <div class="main-body-area">
        <div class="page-grid single GraphPage">
            <h3 class="page-title">...</h3>
                <div class="graph-container">
                    <div class="Graph">
                        <div class="loading">...</div>
                        <div>...</div>
.
.
.
.
driver.find_element_by_id("openGraphPage").click()
time.sleep(3)
driver.get(r'https://example.com/graph')
time.sleep(10)
print(driver.current_url)
print(driver.page_source)

graph = driver.find_element_by_class_name("Graph")
.
.