(Selenium/webscraping noob警告。)
selenium 3.141.0
chromedriver 78
MacOS 10.14.6
我正在编译一个跨越一系列日期的url列表,以便以后下载。URL位于一个表中,该表显示附近日历上所选日期的信息。当用户单击日历上的新日期时,该表将使用新的URL列表进行异步更新,如果该日期不存在文件,则会在<td class="dataTables_empty">
标记中显示一条消息。你知道吗
对于所需范围内的每个日期,我的代码都会单击日历,使用带有自定义WebDriverWait
的expectation
跟踪表中第一个href
值何时更改(表示表已完成更新),并抓取当天的URL。如果给定日期没有可用的文件,代码将查找dataTables_empty
标记以指示下一个日期的url已加载。你知道吗
if current_first_uri != NO_ATT_DATA:
element = WebDriverWait(browser, 10).until_not(
text_to_be_present_in_href((
By.XPATH, first_uri_in_att_xpath),
current_first_uri))
else:
element = WebDriverWait(browser, 10).until_not(
EC.presence_of_element_located((
By.CLASS_NAME, "dataTables_empty")))
这在我的所有用例中都非常有效,只有一个例外:如果连续两天或更多天没有数据,代码不会注意到表已刷新,因为dataTables_empty
类仍保留在表中(单元格在其他方面都是相同的)。你知道吗
在Chrome检查器中,当我从一个没有数据的日期单击到另一个日期时,相应的<td>
闪烁粉红色。这表明这些值正在更新,即使它们的值保持不变。你知道吗
问题:
更新:接受的答案回答了这两个问题中的后一个,我可以使用MutationObserver替换我的整个检测方案。
我使用下面的方法来检查元素是否过时。通常预期为假。你知道吗
当你期待的是真的时候,同样的情况也会对你有所帮助。你知道吗
因此,您可以将元素传递给此方法,并检查是否对其进行了任何更改
你可以使用变异观察者:
并获取上一次更改表dom的时间:
相关问题 更多 >
编程相关推荐