python - 如何使用selenium选择一个类并使用它们之间的空格获取另一个类的数量

时间:2016-02-18 17:28:49

标签: python selenium

问题:自动回复有新消息的网站。

故障:

  1. 登录网站DONE
  2. 转到消息DONE
  3. 的页面
  4. 查找新消息类NOT DONE
  5. 获取url NOT DONE YET
  6. 上显示的新消息的编号

    我正在使用Selenium在Python 2.5中自动执行此过程

    无法选择包含空格的类

    我正在查看网站来源,我注意到每次有新消息时,新类弹出类:notifycircle new fnormal abs nowrap br3 cfff lheight16Showing the red icon that we have new message

    The class that appear showing that there is a new message

    正如您所看到的,它们之间存在空白,我无法使用Selenium库中的find_element_by_class_name。我知道这是一个经典的I can't select classes that has white space between them - Python Selenium。我尝试使用find_element_by_css_selector但没有运气。

    ...
    browser.get("websitehere")
    #if found certain class I will proced to the final goal
    if browser.find_element_by_css_selector(".notifycircle.new.fnormal.abs.nowrap.br3.cfff.lheight16"):
        print "Found element"
    

    选择新邮件的编号

    如图2所示:id_answer_row_####表示消息编号。我想抓住那个消息号码。我怎样才能实现这个目标?

2 个答案:

答案 0 :(得分:0)

你真的需要检查那个span元素吗? tr元素包括“未经重复”的类。如果那表明元素是否未读,那么你可以这样做:

unread_answers = browser.find_elements_by_css_selector("tr.unreaded")

它应该为您提供未读的webelements列表。

您可以创建循环以浏览此列表,通过使用以下内容从ID中提取数字:

for unread_row in unread_answers:
    row_id = unread_row.get_attribute("id")
    m = re.search('answer_row_\d*', row_id)
    row_number = m.group(1)

(注意,我的python可能有点粗糙,这都是未经测试的,但你应该能够得到这个想法)

答案 1 :(得分:0)

您可以使用class name进行元素识别,如下所示:

browser.find_element_by_xpath(//tr[@class="notifycircle new fnormal abs nowrap br3 cfff lheight16"]')