通常,我们可以通过八大元素定位方式定位到所需的元素,不过有些时候,元素的属性和状态并不满足自动化的需求,因此,为了解决这个问题,可以采用获取和修改元素属性等操作。这里我们以携程网举例,
首先打开携程官网首页,
driver.get('https://www.ctrip.com/')
定位导航栏中的【火车】元素,
trains_element = driver.find_element_by_id('nav_trains')
接下来如何获得它的属性呢?使用get_attribute()方法,试着得到它的href属性值,
trains_element.get_attribute('href')
通过运行代码可以得到【火车】的href属性值为:https://trains.ctrip.com/
想到得到元素其他属性值,一样的调用get_attribute即可。
上面我们实现了获取元素属性值,那么有没有办法可以修改呢?答案是:可以,
在【火车】页面,搜索火车时,需要选择日期,
但是这里的日期选择是个控件,只能点开后再选择日期,不能手动输入日期,如果要用自动化实现这个操作无疑是非常麻烦的,先来看看这个元素的属性,
可以发现,元素有readonly属性,因此可以猜想,把这个属性删掉,input是不是就可写了,那如何实现呢?
这里使用execute_script()方法,
先定位input元素:
input_element = driver.find_element_by_xpath('//div[@id="singleDate"]/input')
删除readonly属性,
driver.execute_script('arguments[0].removeAttribute(arguments[1])', input_element, 'readonly')
然后试着在input元素中手动输入日期,有两种方法:
第一种,execute_script()修改元素属性:
driver.execute_script('arguments[0].value="2030-01-01"', input_element) 或 driver.execute_script('arguments[0].setAttribute("value", "2030-01-01"), input_element')
第二种: input_element.clear() input_element.send_keys('2030-01-01')
新增属性和修改属性的方式类似,当元素没有该属性时,即为新增。
既然有元素属性,那么网页当然也有,
可以采用类似的方法,如下:
driver.execute_script('return document.URL')