我已经为页面抓取创建了我的第一个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
答案 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)