应该是简单的XPATH?

时间:2016-03-14 12:07:41

标签: python selenium xpath web-scraping

使用Python和Selenium我试图点击链接,如果它包含文本。在这种情况下说14:10,这将是我追求的DIV。

<div class="league_check" id="hr_selection_18359391" onclick="HorseRacingBranchWindow.showEvent(18359391);" title="Odds Available">                <span class="race-status">                    <img src="/i/none_v.gif" width="12" height="12" onclick="HorseRacingBranchWindow.toggleSelection(18359391); cancelBubble(event);">                </span>14:10 *            </div>

我一直在看手动浏览器。我知道在我的代码触发之前DIV已经加载但是我无法弄清楚它实际上在做什么。

看起来很简单。我不擅长XPATH,但我通常会管理基础知识。

justtime = "14:10"
links = Driver.find_elements_by_xpath("//div*[contains(.,justtime)")

据我所知,该页面上没有其他链接包含文本14:10但是当我循环浏览链接并将其打印出来时,它基本上显示了该页面上的每个链接。

我试图将其缩小到该类名并包含文本

justtime = "14:10"
links = Driver.find_elements_by_xpath("//div[contains(.,justtime) and (contains(@class, 'league_check'))]")

根本不返回任何内容。真的很难过,这对我来说毫无意义。

2 个答案:

答案 0 :(得分:5)

目前,您的XPath没有使用justtime python变量。相反,它引用了<justtime>中不存在的子元素<div>。表单contains(., nonExistentElement)的表达式始终会显示为True,因为nonExistentElement会在此处转换为空字符串。这可能是您的初始XPath返回的元素多于预期的原因之一。

尝试通过使用字符串插值将justtime变量中的值合并到XPath中,并且不要忘记用引号括起该值,以便可以将其正确识别为XPath 文字字符串

justtime = "14:10"
links = Driver.find_elements_by_xpath("//div[contains(.,'%s')]" % justtime)

答案 1 :(得分:0)

您需要使用等待元素

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))