一、下载selenium包:
pip install selenium
二、引用包:
from selenium import webdriver
三、下载对应浏览器的驱动
四、使用驱动打开浏览器:
browser=webdriver.Chrome()
五、打开指定网页:
browser.get("xxxxx")#xxxx为网页的url
六、获取指定页面元素(可用id,name,xpath等)
1、根据id等信息查找元素:
ele=browser.find_element_by_id(“xxx”)#xxx为id
2、对元素的操作
3、xpath方式查找元素:
4、模拟鼠标:
5、处理网页的表格:(此部分转于https://www.cnblogs.com/clarke157/p/6812157.html)
假设网页页面有一个表格,如何获取这个table的指定cell的值?你会说我们可以根据xpath定位到这个cell的行列,然后getText(),不错,但是页面的表格经常都不是固定的,如果这个表格增加或删除一些行列该如何处理?
我们可以把这个问题抽象出来,所有的html table不外乎是由 table 元素以及一个或多个 tr、th 或 td 元素组成,我们可以将行和列参数化,通过传入行和列的值获取返回的text信息。
这样我们可以根据输入参数获取任意一个cell的信息了。
public static String tableCell(WebDriver driver,int row, int column)
{
String text = null;
//去掉表头
row=row+1;
String xpath="//*[@id='xxxx']/tbody/tr["+row+"]/td["+column+"]";
WebElement table=driver.findElement(By.xpath(xpath));
text=table.getText();
return text;
}
6、可以用以下2句查找表格中包含“化妆品”字样的列,然后定位td下的input元素:
//td[contains(.,‘化妆品’)]/input[1]
element = driver.find_element_by_xpath(’//td[contains(.,‘化妆品’)]/input[1]’)
先找到包含元素的单元格,在此单元格中再寻找子元素即可。表达式//td[contains(.,‘化妆品’)]表示模糊匹配文本内容包含“化妆”关键字的单元格td元素,//input[1]表示定位td下的第一个input子元素。
7、遍历表格中所有单元格:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get(r'file:///D:/pythonSeleniumTestCode/pythonStu/src/table.html')
#id定位方式获取整个表格对象
table = driver.find_element_by_id('table')
#通过标签名获取表格中所有行
trlist = driver.find_elements_by_tag_name('tr')
print(len(trlist))
for row in trlist:
#遍历行对象,获取每一个行中所有的列对象
tdlist = row.find_elements_by_tag_name('td')
for col in tdlist:
print(col.text + '\t',end='')
print('\n')
driver.quit()
七、其他小tips:
1、browser.maximize_window():最大化浏览器窗口
2、遇到的小坑:selenium控制点击按钮之后跳转到新页面,但是查看browser.current_url,还停留在上一个页面。
解决方法:
click跳转之后sleep()几秒,等待页面实际跳转,就可以找到元素了。
3、一不小心把find_elementby_xxx,打成了findelements_by_xxx,所以在执行点击的时候报错list没有click()事件。
4、使用click()的时候在元素的后面加了():
deleteStuBtn=browser.find_element_by_xpath('//[@id="app"]/div/div[2]/div/div[2]/div[2]/div[1]/div[3]/table/tbody/tr/td[5]/div/button[2]') deleteStuBtn().click()#------------------------错的!!
应该是:deleteStuBtn.click()
此问题引发的报错内容:
5、在spyder单步调试的时候可以找到元素,但是运行的时候找不到,此种情况可能是实际上还没有加载出来,可在查找上一级元素之后添加:
time.sleep(xxx)#xxx停顿几秒视情况而定
等待几秒后,很可能可以找到元素。
6、复选框的问题:
复选框的tag是input,但是要点击复选框的话,xpath无需定位到input,而只需定位到上一级的例如:span,即可调用click()进行点击。
7、报错:selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: ‘using’ must be a string
报错代码:
codeResultTxt=(By.XPATH,'//div[@class="code-result-right"]/div/p[@class="code-result-box"]')#控制台
输出结果
coderesult=self.driver.find_element(self.codeResultTxt)
解决方法:搜索元素时要在元素xpath前加上*
代码改为:
codeResultTxt=(By.XPATH,'//div[@class="code-result-right"]/div/p[@class="code-result-box"]')#控制台
输出结果
coderesult=self.driver.find_element(*self.codeResultTxt)