大家好,
我在尝试单击网站上的某个元素时遇到了很多麻烦,然后提取了单击所产生的文本。另一个要考虑的是,该代码必须足够强大才能循环。
在下面的修改后的网页源代码中,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')]”“,但似乎不起作用。
任何帮助将不胜感激。干杯!
答案 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]))