从selenium中的特定类复制文本

时间:2017-10-15 14:47:48

标签: python selenium selenium-webdriver

我已经为页面抓取创建了我的第一个python脚本 - >为了访问网页,登录,重定向到另一个页面(导航),然后从特定部分复制文本。

当我尝试以下操作时,它可以正常工作:

copiedText = driver.find_element_by_id("random").text
print(copiedText )

但它有点复杂,因为我要复制的文本的div没有ID。它有一个类,但它不是唯一的。当我在Chrome中复制xPath时,它会返回如下内容:

//*[@id="random"]/div[12]/div[5]/div/div[2]/span

每天都不一样。数字 12 5 可能会有所不同,具体取决于页面中显示的数据(HTML表格中的更多行)。

因此,作为计划B,我尝试使用CSS选择器,而不是从Chrome中复制它。

但是我收到了一个错误:

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

Chrome有没有机会给我正确的答案?如何将outerHTML转换为CSS选择器以便100%确定它是否正确?

outerHTML如下:

<div class="nxm-td col-total text-right" style="">
    <div class="summary-total">
        <span class="summary number">7,363.31</span>
    </div>
</div>

以及从Chrome开发工具复制后的选择器位于:

#media-grid-right > div.nxm-tr.nxm-drop.media-plan-drop.mpSummary.summary-row.no-filter > div.nxm-td.col-total.text-right

UPD

以下工作正常:Dates = wait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#summary > li:nth-child(1)"))).text这个没有返回任何错误,但我没有在cmd中看到任何文字:copiedText = wait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#media-grid-right > div.nxm-tr.nxm-drop.drop.mpSummary.summary-row.no-filter > div.nxm-td.col-total.text-right > div > span.summary.number"))).text

1 个答案:

答案 0 :(得分:1)

尝试按类名定位所需的节点:

copiedText = driver.find_element_by_css_selector("span.summary.number").text
print(copiedText)

另请注意,节点可以动态生成,因此您可能需要等到它出现在DOM中:

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

copiedText = wait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "span.summary.number"))).text
print(copiedText)