相关的HTML可以帮助我们构建更规范的答案。但是从第一行代码开始:
element = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.ID, "tabla_evolucion")))
在第二行代码中几乎是合法的:
element = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.class, "ng-binding ng-scope")))
将引发错误,如下所示:
消息:无效的选择器:不允许使用复合类名
因为您无法通过传递多个类
By.class。
您可以在无效的选择器中找到详细的讨论:不允许将find_element_by_class_name与Webdriver和Python一起使用的复合类名称
解
您需要注意以下几点:
- 没有任何知名度,你的用例,在功能上诱导 WebDriverWait 与关联 EC 作为
presence_of_element_located()
只不过证实了该元素的中存在DOM树。想必向前迈进要么你需要得到的属性如value
,innerText
等,还是会与要素互动。因此,presence_of_element_located()
您无需使用visibility_of_element_located()
或element_to_be_clickable()
您可以在WebDriverWait中找到详细的讨论,无法正常进行
为了获得最佳结果,您可以将
ID
和CLASS
属性组合在一起,并可以使用以下定位策略之一:使用
CSS_SELECTOR
:element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".ng-binding.ng-scope#tabla_evolucion")))
使用
XPATH
:element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[@ and @id='tabla_evolucion']")))



