【问题标题】:How to get text behind canvas using selenium python如何使用 selenium python 在画布后面获取文本
【发布时间】:2017-09-15 21:39:27
【问题描述】:

我想在画布后面获取电子邮件的文本,但没有找到方法。

我正在尝试以下代码

from selenium import webdriver
driver=webdriver.Chrome()
driver.get('https://thatsthem.com/phone/806-241-6888')
table=driver.find_element_by_css_selector('.row.clearfix.mt15').get_attribute('innerHTML')

当我打印表格时,我看不到画布后面的变量(例如 var p1 = "makaya0";)。当我在浏览器上打开“查看页面源代码”时,可以在源代码中看到它们。我们如何访问这些变量并从中获取文本?

以下是页面来源

<ul class="list-unstyled list-inline record-list">

    <li>
        <span class="label label-info"> <i class="fa fa-check"></i> Mobile</span>
    </li>

    <li>
        <i class="fa fa-phone" data-toggle="tooltip" title="Phone Number"></i>
        <h3>
                                                                                                    <span itemprop="telephone">806-241-6889</span>
                                                                                            </h3>
    </li>

    <li>
        <span class="label label-success"><i class="fa fa-check"></i> Valid Email Address</span>
    </li>

    <li>
        <i class="fa fa-envelope" data-toggle="tooltip" title="Email Address"></i>
        <canvas id="c59baf787024e2" width="160" height="20" class="email"></canvas>
        <script id="t2i">
            var p1 = "makaya0";
            var p2 = "923@yah";
            var p3 = "oo.com";
            var c59baf787024e2 = document.getElementById("c59baf787024e2");
            var c59baf787024e2_context = c59baf787024e2.getContext("2d");
            c59baf787024e2_context.fillStyle = "#353535";
            c59baf787024e2_context.font = "98% sans-serif";
            c59baf787024e2_context.textBaseline = "bottom";
            c59baf787024e2_context.fillText(p1 + p2 + p3, 0, 20);
            document.getElementById("t2i").parentElement.removeChild(document.getElementById("t2i"));
        </script>
    </li>

    <li itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
        <i class="fa fa-home" data-toggle="tooltip" title="Address"></i>
        <a class="no-linky" href="https://thatsthem.com/address/8114-Sherman-Ave-Lubbock-TX-79423">

            <span itemprop="streetAddress">8114 Sherman Ave</span>
            <br/> <i class="fa-placeholder"></i>

            <span itemprop="addressLocality">Lubbock</span>

            <span itemprop="addressRegion">TX</span>

            <span itemprop="postalCode">79423</span>
        </a>
    </li>

</ul>

【问题讨论】:

  • 那是因为这部分是一个脚本(包含在
  • 谢谢。如果有多个 var p1,如何获取所有 var p1?driver.execute_script("return p1;") return last var p1.
  • 好吧,我猜你想要什么 id retutn p1+p2+p3
  • 如何从 JS 中得到“答案”:canvas.font = '60px Arial'; canvas.strokeText('答案:61655',90,112);在这里我需要返回 'Answer' 即 61655.HOw 怎么做?

标签: javascript python web-scraping automation selenium-chromedriver


【解决方案1】:

您所说的值是 javascript 变量。 它们不是“文字”。

要通过 selenium 在 javascript 中运行脚本,您可以这样做:

output = self.driver.execute_script("return p1;")

它会将javascript中变量p1的值放入python中的output变量中。

这假设变量 p1 在全局上下文中,这似乎是你的情况。

【讨论】:

  • PS:从网站上删除电子邮件地址通常违反隐私政策,所以如果我是你,我不会这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2023-03-30
  • 2017-11-13
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多