Selenium Python在.click()之后提取文本

时间:2018-09-01 08:38:30

标签: python selenium xpath element

大家好,

我在尝试单击网站上的某个元素时遇到了很多麻烦,然后提取了单击所产生的文本。另一个要考虑的是,该代码必须足够强大才能循环。

在下面的修改后的网页源代码中,id ='atelno80112862'是我识别要单击的元素的方式。单击后,我想要的电话号码“(65)6890 6333”替换网页上的文本“ Call”。之后,id ='telno80112862'是我识别要提取的文本的方式。

<div id="ctl00_ContentPlaceHolder1_dgrdCompany_ctl02_idContact">
<a style="display: inline; width: 100px; cursor: pointer; cursor: hand;" id='atelno80112862' onclick="showElement('telno80112862');" title='(65) 6890 6333'>
<img src="/images/call_icon.jpg" />CALL</a>
<a style="display: none; width: 100px;" id='telno80112862' href="tel:(65) 6890 6333">(65) 6890 6333</a>

在我的代码上(我在问题区域将其修改为零):

for j in range(2 ,10):
    path5 = "ctl00_ContentPlaceHolder1_dgrdCompany_ctl0{0}_idContact".format(j)
    path6 = "//a[contains(@id,'atel')]"
    path7 = "//a[@id='telno80112862']"

    try:
        phone = driver.find_element_by_id(path5)
        phone_num = phone.find_element_by_xpath(path6).click()
        phone_info = phone.find_element_by_xpath(path7)
    except:
        print("ERROR: NO PHONE NUMBER")

这部分起作用,当我循环时,每次迭代我都会得到它:

(65)6890 6333 错误:没有电话号码

第一个问题是为什么我也要获得除外输出?第二个问题是我无法提高path7的鲁棒性。它仅在我提供确切的相对xpath的情况下有效。香港专业教育学院尝试使用部分xpath“ // a [(contains(@ id,'telno')]”“,但似乎不起作用。

任何帮助将不胜感激。干杯!

1 个答案:

答案 0 :(得分:0)

下面的代码在一页上获得所有公司名称和电话号码。

companies = driver.execute_script('return [...document.querySelectorAll("a[id$=Hyperlink4],a[id^=telno]")].map((e,i) => e.innerText.trim())')
print(companies)

for i in range(0, len(companies), 2):
    print('{0} : {1}'.format(companies[i], companies[i+1]))