Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从父元素具有属性style=”的元素中提取文本;显示:无“;使用硒_Python_Selenium_Selenium Webdriver - Fatal编程技术网

Python 如何从父元素具有属性style=”的元素中提取文本;显示:无“;使用硒

Python 如何从父元素具有属性style=”的元素中提取文本;显示:无“;使用硒,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我想从此分区提取电话号码。此分区具有style=“display:none” 因此,我无法联系该部门的孩子。请帮我从该部门获取电话号码 我想我们需要改变这种显示方式:无;到可见性:可见。如何在Python Selenuim中实现这一点 编辑 我已经尝试了下面的代码,正如第一个答案中所建议的,但它抛出了以下错误: email_div = browser.find_element_by_class_name("returnemail") email_div_contents = browser.ex

我想从此分区提取电话号码。此分区具有style=“display:none” 因此,我无法联系该部门的孩子。请帮我从该部门获取电话号码

我想我们需要改变这种显示方式:无;到可见性:可见。如何在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”对象没有属性 '按\u类\u名称查找\u元素\u


根据文档执行脚本()返回:

命令的JSON响应加载到dictionary对象中

因此,当您试图调用dictionary对象上的
find\u element\u by\u class\u name()

email_div_contents.find_element_by_class_name('reply-tel-number').get_attribute('textContent')
出现以下错误:

AttributeError:“str”对象没有“按类名称查找元素”属性


要从所需元素中删除属性style=“display:none”,并提取电话号码,可以使用以下解决方案:

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")

您的代码的位置不正确:

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\u div\u contents
是一个字符串,表示
email\u div
的HTML代码,而不是web元素, 不能对字符串调用
find\u element\u by\u class\u name()

这就是为什么会出现错误:

“str”对象没有“按类名称查找元素”属性

始终可以调用
get_attribute()
来获取可见和不可见元素的属性值

要获取不可见元素的文本内容,可以使用
get\u属性('innerText')

实际上,
element.text
调用
element.get_属性('innerText')
内部,但是
element.text
将尊重用户体验:如果用户无法从页面中看到元素,
element.text
将返回用户看到的空字符串。(偶数
element.get_属性('innerText')
返回非空字符串)


. 这通常意味着你需要的是半个小时的时间和当地的导师在一起,或是走一走,而不是堆积如山。既然你还没有写任何与问题相关的代码,你真的需要先备份并使用基本工具。您好,你应该在我的答案中添加注释,而不是用我发布的代码编辑问题,否则我无法知道!查看我的更新答案使用:email\u div\u contents=email\u div.get\u attribute('innerHTML')而不是browser.execute等
element.get\u attribute()
处理可见和不可见元素,因此在某些情况下,无需修改CSS使元素可见即可更改页面的原始显示逻辑,这将改变页面布局,至少这不是推荐的方式。
execute\u script()
不会返回
字符串,而是返回加载到字典对象中的命令JSON响应。。因此,
email\u div\u contents
永远不是字符串。有关详细信息,请参阅API文档。
phone_number = driver.find_element_by_css_selector("div.returnemail .reply-tel-number")
                     .get_attribute('innerText')
   @property
   text:
     if ( element is visible ):
        return element.get_attribute('innerText')

     else:
        return ''