selenium定位隐藏元素2怎么根据坐标定位元素

selenium&webdriver定位不到元素的五种原因及解决办法
1.动态id定位不到元素
for example:
//WebElement xiexin_element =
driver.findElement(By.id("_mail_component_82_82"));
WebElement xiexin_element =
driver.findElement(By.xpath("//span[contains(.,'写
xiexin_element.click();
上面一段代码注释掉的部分为通过id定位element的,但是此id“_mail_component_82_82”后面的数字会随着你每次登陆而变化,此时就无法通过id准确定位到element。
所以推荐使用xpath的相对路径方法查找到该元素。
2.iframe原因定位不到元素
由于需要定位的元素在某一个frame里边,所以有时通过单独的id/name/xpath还是定位不到此元素
比如以下一段xml源文件:
class="nodeTag " style="word-break: break- line-height:
"&iframe&id="left_frame"&scrolling="auto"&frameborder="0"&src="index.php?m=Index&a=Menu"&name="left_frame"&noresize="noresize"&style="height:
100%;visibility: width: 100%;z-index:
&&span class="nodeTag " style="word-break: break-
line-height: normal !"&html&
class="nodeTag " style="word-break: break- line-height: normal
&&span class="nodeTag " style="word-break: break-
line-height: normal !"&body&class="menuBg"&
&&span class="nodeTag " style="word-break: break-
line-height: normal !"&div&id="menu_node_type_0"&
&&span class="nodeTag " style="word-break: break-
line-height: normal !"&table&width="193"&cellspacing="0"&cellpadding="0"&border="0"&
&&span class="nodeTag " style="word-break: break-
line-height: normal !"&tbody&
class="nodeTag " style="word-break: break- line-height: normal
&&span class="nodeTag " style="word-break: break-
line-height: normal !"&tr&
&&span class="nodeTag " style="word-break: break-
line-height: normal !"&td&id="c_1"&
&&span class="nodeTag " style="word-break: break-
line-height: normal !"&table&class="menuSub"&cellspacing="0"&cellpadding="0"&border="0"&align="center"&
&&span class="nodeTag " style="word-break: break-
line-height: normal !"&tbody&
class="nodeTag " style="word-break: break- line-height: normal
!"&tr&class="sub_menu"&
class="nodeTag " style="word-break: break- line-height: normal
class="nodeTag " style="word-break: break- line-height: normal
!"&a&href="index.php?m=Coupon&a=SearchCouponInfo"&target="right_frame"&密码重置&/&span
class="nodeTag " style="word-break: break- line-height: normal
class="nodeTag " style="word-break: break- line-height: normal
class="nodeTag " style="word-break: break- line-height: normal
原本可以通过
WebElement element =
driver.findElement(By.linkText("密码重置"));
来定位此元素,但是由于该元素在iframe&id="left_frame"这个frame里边
所以需要先通过定位frame然后再定位frame里边的某一个元素的方法定位此元素
WebElement element
=driver.switchTo().frame("left_frame").findElement(By.linkText("密码重置"));
3.不在同一个frame里边查找元素
大家可能会遇到页面左边一栏属于left_frame,右侧属于right_frame的情况,此时如果当前处在
left_frame,就无法通过id定位到right_frame的元素。此时需要通过以下语句切换到默认的content
driver.switchTo().defaultContent();
例如当前所在的frame为left_frame
WebElement xiaoshoumingxi_element =
driver.switchTo().frame("left_frame").findElement(By.linkText("销售明细"));
xiaoshoumingxi_element.click();
需要切换到right_frame&&&&&&
&&&&&&&driver.switchTo().defaultContent();
Select quanzhong_select2 = new
Select(driver.switchTo().frame("right_frame").findElement(By.id("coupon_type_str")));
quanzhong_select2.selectByVisibleText("售后0小时");
xpath描述错误
这个是因为在描述路径的时候没有按照xpath的规则来写 造成找不到元素的情况出现
5.点击速度过快
页面没有加载出来就需要点击页面上的元素
这个需要增加一定等待时间,显示等待时间可以通过WebDriverWait 和util来实现
//用WebDriverWait和until实现显示等待 等待欢迎页的图片出现再进行其他操作
WebDriverWait wait = (new WebDriverWait(driver,10));
wait.until(new ExpectedCondition(){
&& public Boolean apply(WebDriver
&& boolean loadcomplete =
d.switchTo().frame("right_frame").findElement(By.xpath("//center/div[@class='welco']/img")).isDisplayed();
也可以自己预估时间通过Thread.sleep(5000);//等待5秒 这个是强制线程休息
6.firefox安全性强,不允许跨域调用出现报错
错误描述:uncaught exception: [Exception... "Component returned failure
code: 0x (NS_ERROR_FAILURE)
[nsIDOMNSHTMLDocument.execCommand]" nsresult: "0x
(NS_ERROR_FAILURE)" location:
解决办法:
这是因为firefox安全性强,不允许跨域调用。&
Firefox 要取消XMLHttpRequest的跨域限制的话,第一
是从 about:config 里设置 signed.applets.codebase_principal_support =
true; (地址栏输入about:config 即可进行firefox设置)
第二就是在open的代码函数前加入类似如下的代码: try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) { alert("Permission UniversalBrowserRead denied.");
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。[python爬虫] Selenium常见元素定位方法和操作的学习介绍
一. 定位元素方法
官网地址:
这里有各种策略用于定位网页中的元素(locate elements),你可以选择最适合的方案,Selenium提供了一下方法来定义一个页面中的元素:
find_element_by_idfind_element_by_namefind_element_by_xpathfind_element_by_link_textfind_element_by_partial_link_textfind_element_by_tag_namefind_element_by_class_namefind_element_by_css_selector 下面是查找多个元素(这些方法将返回一个列表):
find_elements_by_namefind_elements_by_xpathfind_elements_by_link_textfind_elements_by_partial_link_textfind_elements_by_tag_namefind_elements_by_class_namefind_elements_by_css_selector
除了上面给出的公共方法,这里也有两个在页面对象定位器有用的私有方法。这两个私有方法是find_element和find_elements。
常用方法是通过xpath相对路径进行定位,同时也是比较好的方法。举例:
&form id=&loginForm&&
&input name=&username& type=&text&&
&input name=&password& type=&password&&
&input name=&continue& type=&submit& value=&Login&&
&input name=&continue& type=&button& value=&Clear&&
定位username元素的方法如下:
username = driver.find_element_by_xpath(&//form[input/@name='username']&)
username = driver.find_element_by_xpath(&//form[@id='loginForm']/input[1]&)
username = driver.find_element_by_xpath(&//input[@name='username']&)
[1] 第一个form元素通过一个input子元素,name属性和值为username实现
[2] 通过id=loginForm值的form元素找到第一个input子元素
[3] 属性名为name且值为username的第一个input元素
二. 操作元素方法
在讲述完定位对象(locate elements)之后我们需要对该已定位对象进行操作,通常所有的操作与页面交互都将通过WebElement接口,常见的操作元素方法如下:
clear 清除元素的内容send_keys 模拟按键输入click 点击元素submit 提交表单
举例自动访问FireFox自动登录163邮箱。
from selenium import webdriver
from mon.keys import Keys
import time
# Login 163 email
driver = webdriver.Firefox()
driver.get(&/&)
elem_user = driver.find_element_by_name(&username&)
elem_user.clear
elem_user.send_keys(&&)
elem_pwd = driver.find_element_by_name(&password&)
elem_pwd.clear
elem_pwd.send_keys(&******&)
elem_pwd.send_keys(Keys.RETURN)
#driver.find_element_by_id(&loginBtn&).click()
#driver.find_element_by_id(&loginBtn&).submit()
time.sleep(5)
assert &baidu& in driver.title
driver.close()
driver.quit()
首先通过name定位用户名和密码,再调用方法clear()清除输入框默认内容,如&请输入密码&等提示,通过send_keys(&**&)输入正确的用户名和密码,最后通过click()点击登录按钮或send_keys(Keys.RETURN)相当于回车登录,submit()提交表单。
PS:如果需要输入中文,防止编码错误使用send_keys(u&中文用户名&)。
三. WebElement接口获取值
通过WebElement接口可以获取常用的值,这些值同样非常重要。
size 获取元素的尺寸text 获取元素的文本get_attribute(name) 获取属性值location 获取元素坐标,先找到要获取的元素,再调用该方法page_source 返回页面
driver.title 返回页面标题current_url 获取当前页面的URLis_displayed() 设置该元素是否可见is_enabled() 判断元素是否被使用is_selected() 判断元素是否被选中tag_name 返回元素的tagName
举例代码如下:
from selenium import webdriver
from mon.keys import Keys
import time
driver = webdriver.PhantomJS(executable_path=&G:\phantomjs-1.9.1-windows\phantomjs.exe&)
driver.get(&/&)
size = driver.find_element_by_name(&wd&).size
print size
#尺寸: {'width': 500, 'height': 22}
news = driver.find_element_by_xpath(&//div[@id='u1']/a[1]&).text
print news
#文本: 新闻
href = driver.find_element_by_xpath(&//div[@id='u1']/a[2]&).get_attribute('href')
name = driver.find_element_by_xpath(&//div[@id='u1']/a[2]&).get_attribute('name')
print href,name
#属性值: / tj_trhao123
location = driver.find_element_by_xpath(&//div[@id='u1']/a[3]&).location
print location
#坐标: {'y': 19, 'x': 498}
print driver.current_url
#当前链接: /
print driver.title
#标题: 百度一下, 你就知道
result = location = driver.find_element_by_id(&su&).is_displayed()
print result
#是否可见: True
其中图片解释如下图所示。
四. 鼠标操作
在现实的自动化测试中关于鼠标的操作不仅仅是click()单击操作,还有很多包含在ActionChains类中的操作。如下:
context_click(elem) 右击鼠标点击元素elem,另存为等行为double_click(elem) 双击鼠标点击元素elem,地图web可实现放大功能drag_and_drop(source,target) 拖动鼠标,源元素按下左键移动至目标元素释放move_to_element(elem) 鼠标移动到一个元素上click_and_hold(elem) 按下鼠标左键在一个元素上perform() 在通过调用该函数执行ActionChains中存储行为 举例如下图所示,获取通过鼠标右键另存为百度图片logo。代码:
import time
from selenium import webdriver
from mon.keys import Keys
from mon.action_chains import ActionChains
driver = webdriver.Firefox()
driver.get(&&)
#鼠标移动至图片上 右键保存图片
elem_pic = driver.find_element_by_xpath(&//div[@id='lg']/img&)
print elem_pic.get_attribute(&src&)
action = ActionChains(driver).move_to_element(elem_pic)
action.context_click(elem_pic)
#重点:当右键鼠标点击键盘光标向下则移动至右键菜单第一个选项
action.send_keys(Keys.ARROW_DOWN)
time.sleep(3)
action.send_keys('v') #另存为
action.perform()
#获取另存为对话框(失败)
alert.switch_to_alert()
alert.accept()
效果如下图所示,通过xpath定位到图片位置并右击鼠标,在弹出的菜单中选择&另存为图片&。但是如何点击&另存为对话框&的&保存&按钮是个难点,目前刚学习阶段,境界没到无法解决。原因:
WebDriver cannot directly interact with dialog windows this is because dialog windows are the domain of the operating system and not the webpage.
该部分推荐参考资料:
书籍《selenium2 python自动化测试》 作者:虫师
五. 键盘操作
前面讲述了鼠标操作,现在讲述键盘操作。在webdriver的Keys类中提供了键盘所有的按键操作,当然也包括一些常见的组合键操作如Ctrl+A(全选)、Ctrl+C(复制)、Ctrl+V(粘贴)。更多键参考官方文档对应的编码。
send_keys(Keys.ENTER) 按下回车键send_keys(Keys.TAB) 按下Tab制表键send_keys(Keys.SPACE) 按下空格键spacesend_keys(Kyes.ESCAPE) 按下回退键Escsend_keys(Keys.BACK_SPACE) 按下删除键BackSpacesend_keys(Keys.SHIFT) 按下shift键send_keys(Keys.CONTROL) 按下Ctrl键send_keys(Keys.ARROW_DOWN) 按下鼠标光标向下按键send_keys(Keys.CONTROL,'a') 组合键全选Ctrl+Asend_keys(Keys.CONTROL,'c') 组合键复制Ctrl+Csend_keys(Keys.CONTROL,'x') 组合键剪切Ctrl+Xsend_keys(Keys.CONTROL,'v') 组合键粘贴Ctrl+V
这里使用的例子参考虫师的书籍《selenium2 python自动化测试》,推荐该书给大家。代码还是非常有意思的,大家自己去感受下吧~
#coding=utf-8
import time
from selenium import webdriver
from mon.keys import Keys
driver = webdriver.Firefox()
driver.get(&&)
#输入框输入内容
elem = driver.find_element_by_id(&kw&)
elem.send_keys(&Eastmount CSDN&)
time.sleep(3)
#删除一个字符CSDN 回退键
elem.send_keys(Keys.BACK_SPACE)
elem.send_keys(Keys.BACK_SPACE)
elem.send_keys(Keys.BACK_SPACE)
elem.send_keys(Keys.BACK_SPACE)
time.sleep(3)
#输入空格+&博客&
elem.send_keys(Keys.SPACE)
elem.send_keys(u&博客&)
time.sleep(3)
#ctrl+a 全选输入框内容
elem.send_keys(Keys.CONTROL,'a')
time.sleep(3)
#ctrl+x 剪切输入框内容
elem.send_keys(Keys.CONTROL,'x')
time.sleep(3)
#输入框重新输入搜索
elem.send_keys(Keys.CONTROL,'v')
time.sleep(3)
#通过回车键替代点击操作
driver.find_element_by_id(&su&).send_keys(Keys.ENTER)
time.sleep(3)
driver.quit()10991人阅读
Python爬虫(28)
& & & & 这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法、鼠标操作、键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~
& & & & 前文目录:
一. 定位元素方法
& & & & 官网地址:
& & & & 这里有各种策略用于定位网页中的元素(locate elements),你可以选择最适合的方案,Selenium提供了一下方法来定义一个页面中的元素:
find_element_by_idfind_element_by_namefind_element_by_xpathfind_element_by_link_textfind_element_by_partial_link_textfind_element_by_tag_namefind_element_by_class_namefind_element_by_css_selector
& & & & 下面是查找多个元素(这些方法将返回一个列表):
find_elements_by_namefind_elements_by_xpathfind_elements_by_link_textfind_elements_by_partial_link_textfind_elements_by_tag_namefind_elements_by_class_namefind_elements_by_css_selector
& & & & 除了上面给出的公共方法,这里也有两个在页面对象定位器有用的私有方法。这两个私有方法是find_element和find_elements。
& & & & 常用方法是通过xpath相对路径进行定位,同时CSS也是比较好的方法。举例:
&form id=&loginForm&&
&input name=&username& type=&text& /&
&input name=&password& type=&password& /&
&input name=&continue& type=&submit& value=&Login& /&
&input name=&continue& type=&button& value=&Clear& /&
&html&& & & & 定位username元素的方法如下:
username = driver.find_element_by_xpath(&//form[input/@name='username']&)
username = driver.find_element_by_xpath(&//form[@id='loginForm']/input[1]&)
username = driver.find_element_by_xpath(&//input[@name='username']&)& & & & [1] 第一个form元素通过一个input子元素,name属性和值为username实现
& & & & [2] 通过id=loginForm值的form元素找到第一个input子元素
& & & & [3] 属性名为name且值为username的第一个input元素
二. 操作元素方法
& & & & 在讲述完定位对象(locate elements)之后我们需要对该已定位对象进行操作,通常所有的操作与页面交互都将通过WebElement接口,常见的操作元素方法如下:
clear 清除元素的内容send_keys 模拟按键输入click 点击元素submit 提交表单
& & & & 举例自动访问FireFox浏览器自动登录163邮箱。
from selenium import webdriver
from mon.keys import Keys
import time
# Login 163 email
driver = webdriver.Firefox()
driver.get(&/&)
elem_user = driver.find_element_by_name(&username&)
elem_user.clear
elem_user.send_keys(&&)
elem_pwd = driver.find_element_by_name(&password&)
elem_pwd.clear
elem_pwd.send_keys(&******&)
elem_pwd.send_keys(Keys.RETURN)
#driver.find_element_by_id(&loginBtn&).click()
#driver.find_element_by_id(&loginBtn&).submit()
time.sleep(5)
assert &baidu& in driver.title
driver.close()
driver.quit()
& & & & 首先通过name定位用户名和密码,再调用方法clear()清除输入框默认内容,如“请输入密码”等提示,通过send_keys(&**&)输入正确的用户名和密码,最后通过click()点击登录按钮或send_keys(Keys.RETURN)相当于回车登录,submit()提交表单。
& & & & PS:如果需要输入中文,防止编码错误使用send_keys(u&中文用户名&)。
三. WebElement接口获取值
& & & & 通过WebElement接口可以获取常用的值,这些值同样非常重要。
size 获取元素的尺寸text 获取元素的文本get_attribute(name) 获取属性值location 获取元素坐标,先找到要获取的元素,再调用该方法page_source 返回页面源码
driver.title 返回页面标题current_url 获取当前页面的URLis_displayed() 设置该元素是否可见is_enabled() 判断元素是否被使用is_selected() 判断元素是否被选中tag_name 返回元素的tagName
& & & & 举例代码如下:
from selenium import webdriver
from mon.keys import Keys
import time
driver = webdriver.PhantomJS(executable_path=&G:\phantomjs-1.9.1-windows\phantomjs.exe&)
driver.get(&/&)
size = driver.find_element_by_name(&wd&).size
print size
#尺寸: {'width': 500, 'height': 22}
news = driver.find_element_by_xpath(&//div[@id='u1']/a[1]&).text
print news
#文本: 新闻
href = driver.find_element_by_xpath(&//div[@id='u1']/a[2]&).get_attribute('href')
name = driver.find_element_by_xpath(&//div[@id='u1']/a[2]&).get_attribute('name')
print href,name
#属性值: / tj_trhao123
location = driver.find_element_by_xpath(&//div[@id='u1']/a[3]&).location
print location
#坐标: {'y': 19, 'x': 498}
print driver.current_url
#当前链接: /
print driver.title
#标题: 百度一下, 你就知道
result = location = driver.find_element_by_id(&su&).is_displayed()
print result
#是否可见: True& & & & 其中图片解释如下图所示。
四. 鼠标操作
& & & & 在现实的自动化测试中关于鼠标的操作不仅仅是click()单击操作,还有很多包含在ActionChains类中的操作。如下:
context_click(elem) 右击鼠标点击元素elem,另存为等行为double_click(elem) 双击鼠标点击元素elem,地图web可实现放大功能drag_and_drop(source,target) 拖动鼠标,源元素按下左键移动至目标元素释放move_to_element(elem) 鼠标移动到一个元素上click_and_hold(elem) 按下鼠标左键在一个元素上perform() 在通过调用该函数执行ActionChains中存储行为
& & & & 举例如下图所示,获取通过鼠标右键另存为百度图片logo。代码:
import time
from selenium import webdriver
from mon.keys import Keys
from mon.action_chains import ActionChains
driver = webdriver.Firefox()
driver.get(&&)
#鼠标移动至图片上 右键保存图片
elem_pic = driver.find_element_by_xpath(&//div[@id='lg']/img&)
print elem_pic.get_attribute(&src&)
action = ActionChains(driver).move_to_element(elem_pic)
action.context_click(elem_pic)
#重点:当右键鼠标点击键盘光标向下则移动至右键菜单第一个选项
action.send_keys(Keys.ARROW_DOWN)
time.sleep(3)
action.send_keys('v') #另存为
action.perform()
#获取另存为对话框(失败)
alert.switch_to_alert()
alert.accept()
& & & & 效果如下图所示,通过xpath定位到图片位置并右击鼠标,在弹出的菜单中选择“另存为图片”。但是如何点击“另存为对话框”的“保存”按钮是个难点,目前刚学习阶段,境界没到无法解决。原因:
& & & & 该部分推荐参考资料:
& & & & & &&
& & & & & &&
& & & & & &&
& & & & & & 书籍《selenium2 python自动化测试》 作者:虫师
五. 键盘操作
& & & & 参考:
& & & & 前面讲述了鼠标操作,现在讲述键盘操作。在webdriver的Keys类中提供了键盘所有的按键操作,当然也包括一些常见的组合键操作如Ctrl+A(全选)、Ctrl+C(复制)、Ctrl+V(粘贴)。更多键参考官方文档对应的编码。
send_keys(Keys.ENTER) 按下回车键send_keys(Keys.TAB) 按下Tab制表键send_keys(Keys.SPACE) 按下空格键spacesend_keys(Kyes.ESCAPE) 按下回退键Escsend_keys(Keys.BACK_SPACE) 按下删除键BackSpacesend_keys(Keys.SHIFT) 按下shift键send_keys(Keys.CONTROL) 按下Ctrl键send_keys(Keys.ARROW_DOWN) 按下鼠标光标向下按键send_keys(Keys.CONTROL,'a') 组合键全选Ctrl+Asend_keys(Keys.CONTROL,'c') 组合键复制Ctrl+Csend_keys(Keys.CONTROL,'x') 组合键剪切Ctrl+Xsend_keys(Keys.CONTROL,'v') 组合键粘贴Ctrl+V
& & & & 这里使用的例子参考虫师的书籍《selenium2 python自动化测试》,推荐该书给大家。代码还是非常有意思的,大家自己去感受下吧~
#coding=utf-8
import time
from selenium import webdriver
from mon.keys import Keys
driver = webdriver.Firefox()
driver.get(&&)
#输入框输入内容
elem = driver.find_element_by_id(&kw&)
elem.send_keys(&Eastmount CSDN&)
time.sleep(3)
#删除一个字符CSDN 回退键
elem.send_keys(Keys.BACK_SPACE)
elem.send_keys(Keys.BACK_SPACE)
elem.send_keys(Keys.BACK_SPACE)
elem.send_keys(Keys.BACK_SPACE)
time.sleep(3)
#输入空格+&博客&
elem.send_keys(Keys.SPACE)
elem.send_keys(u&博客&)
time.sleep(3)
#ctrl+a 全选输入框内容
elem.send_keys(Keys.CONTROL,'a')
time.sleep(3)
#ctrl+x 剪切输入框内容
elem.send_keys(Keys.CONTROL,'x')
time.sleep(3)
#输入框重新输入搜索
elem.send_keys(Keys.CONTROL,'v')
time.sleep(3)
#通过回车键替代点击操作
driver.find_element_by_id(&su&).send_keys(Keys.ENTER)
time.sleep(3)
driver.quit()
最后希望文章对你有所帮助吧,如果有错误或不足之处,还请海涵~同时接下来学习下Linux和下面作者的文章。
& & & (By:Eastmount
下午1点 &&)
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1271063次
积分:15213
积分:15213
排名:第662名
原创:244篇
转载:10篇
评论:1145条
作者:杨秀璋
学历:本科-北京理工大学
&&&&&&&&&&&硕士-北京理工大学
现任教于贵财财经大学信息学院
简介:自幼受贵州大山的熏陶,养成了诚实质朴的性格。经过寒窗苦读,考入BIT,为完成自己的教师梦,放弃IT、航天等工作,成为贵财一名大学教师,并想把自己所学所感真心传授给自己的学生,帮助更多陌生人。
贵州纵美路迢迢,
为负劳心此一遭。
收得破书三四本,
也堪将去教尔曹。
娜美人生,醉美生活。
他和她经历风雨,慢慢变老。
文章:13篇
阅读:49961
文章:12篇
阅读:37840
文章:35篇
阅读:224603
文章:29篇
阅读:211828
文章:18篇
阅读:118192
文章:12篇
阅读:50766
文章:19篇
阅读:127437
文章:16篇
阅读:65281
文章:20篇
阅读:97750
文章:13篇
阅读:73901
(1)(2)(4)(11)(2)(1)(2)(10)(9)(5)(3)(3)(2)(3)(4)(2)(3)(5)(5)(6)(11)(20)(6)(3)(5)(13)(5)(7)(7)(5)(7)(8)(9)(3)(2)(1)(1)(6)(3)(6)(5)(7)(1)(1)(1)(10)(4)(6)(3)(4)(2)(2)
【算法知识】
【C# .NET】
【游戏开发】
【Android】
【正能量&导师】
【图形&视频处理】
【各种知识】
【数据挖掘】
【.NET MF&嵌入式】
【架构&模式】
【操作系统】
【IOS开发】
【CSDN扫地僧】

我要回帖

更多关于 selenium div元素定位 的文章

 

随机推荐