我想从这个div中提取电话号码。这个div有style =“display:none” 所以我无法访问这个div的孩子。请帮助我从div获取电话号码。
我想我们需要改变那个显示:无;能见度:可见。我怎么能在Python Selenuim中做到这一点
修改
我已尝试过以下代码,如第一个答案所示,但它会引发以下错误:
email_div = browser.find_element_by_class_name("returnemail")
email_div_contents = browser.execute_script('return arguments[0].innerHTML', email_div)
telephone = email_div_contents.find_element_by_class_name('reply-tel-number').get_attribute('textContent')
AttributeError:'str'对象没有属性 “find_element_by_class_name
答案 0 :(得分:-1)
根据文档execute_script()
返回:
将命令的JSON响应加载到字典对象中。
因此,当您尝试在字典对象上调用find_element_by_class_name()
方法时向前移动,如下所示:
email_div_contents.find_element_by_class_name('reply-tel-number').get_attribute('textContent')
引发以下错误:
属性错误:' str'对象没有属性' find_element_by_class_name'
要从所需元素中删除属性 style =&#34; display:none&#34; 并提取电话号码,您可以使用以下解决方案:< / p>
element = driver.find_element_by_xpath("//div[@class='returnemail js-only']")
driver.execute_script("arguments[0].removeAttribute('style')", element)
tel_number = element.find_element_by_xpath("./aside/ul//li//p[@class='reply-tel-number']").get_attribute("innerHTML")
答案 1 :(得分:-2)
您的代码地址不正确:
email_div = browser.find_element_by_class_name("returnemail")
email_div_contents = browser.execute_script('return arguments[0].innerHTML', email_div)
email_div_contents.find_element_by_class_name()
email_div_contents
是一个字符串,代表email_div
的HTML代码,而不是网络元素,
您无法在字符串上调用find_element_by_class_name()
。
这就是你遇到错误的原因:
&#39; STR&#39;对象没有属性&#39; find_element_by_class_name&#39;
您始终可以调用get_attribute()
来获取可见和不可见元素的属性值。
要获取不可见元素的文本内容,您可以使用get_attribute('innerText')
。
phone_number = driver.find_element_by_css_selector("div.returnemail .reply-tel-number")
.get_attribute('innerText')
实际上,element.text
在内部调用element.get_attribute('innerText')
,但element.text
会尊重用户体验:如果用户无法从页面中看到该元素,element.text
将返回空用户看到的字符串。 (偶数element.get_attribute('innerText')
返回非空字符串)
@property
text:
if ( element is visible ):
return element.get_attribute('innerText')
else:
return ''