当前位置: 首页 > news >正文

网站建设分几种类型渭南做网站哪家公司

网站建设分几种类型,渭南做网站哪家公司,最好用的cms,网站页面组成目录 一、浏览器驱动下载二、selenium-python安装#xff08;打开网站、操作元素#xff09;三、网页解析#xff08;HTML、xpath#xff09;四、selenium基本操作1、元素定位八种方法2、元素动态定位3、iframe切换4、填充表单_填充文本框5、填充表单_单选按钮6、填充表单_… 目录 一、浏览器驱动下载二、selenium-python安装打开网站、操作元素三、网页解析HTML、xpath四、selenium基本操作1、元素定位八种方法2、元素动态定位3、iframe切换4、填充表单_填充文本框5、填充表单_单选按钮6、填充表单_下拉列表7、切换窗口和标签页8、显式等待9、隐式等待10、警告框11、confirm确认框12、prompt提示框13、鼠标操作动作链14、执行js代码_滚动115、执行js代码_滚动216、上传操作_input上传17、上传操作_非input上传_pywinauto18、上传操作_非input上传_pyautogui 五、selenium调整窗口大小六、判断元素是否允许被操作七、获取某个元素的html八、其他问题1、svg定位2、处理chrome显示通知弹框3、获取元素的文本4、切换网址5、find_element_by_xpath()被弃用解决方案 一、浏览器驱动下载 Selenium需要浏览器驱动程序才能与所选浏览器交互。例如Firefox需要安装geckodriver。确保它在PATH中。 主流浏览器驱动下载地址如下 浏览器驱动名称打开方式及注意事项地址Chromechromedriverdriver webdriver.Chrome()下载浏览器对应版本的chromedriver.exe一定要创建对象不然打开会闪退https://registry.npmmirror.com/binary.html?pathchromedriverFirefoxgeckodriverwebdriver.Firefox()下载最新版本的geckodriver.exehttps://github.com/mozilla/geckodriver/releasesEdgeMicrosoftWebDriverdriver webdriver.Edge()最好在官网下载对应版本的浏览器https://www.microsoft.com/en-us/edge然后下载浏览器对应版本的msedgedriver.exe一定要创建对象不然打开会闪退windows10运行代码时将msedgedriver.exe重命名为MicrosoftWebDriver.exe不然运行程序会报错windows11运行代码时msedgedriver.exe不要重命名https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriverIEIEDriverServerwebdriver.Ie()下载selenium对应版本的IEDriverServer.exehttps://registry.npmmirror.com/binary.html?pathselenium 具体可以查看chromedriver、geckodriver、MicrosoftWebDriver、IEDriverServer和operadriver之间的恩怨纠葛 二、selenium-python安装打开网站、操作元素 1.安装 pip install -U selenium注-U就是指定下载最新版本的selenium 2. 控制浏览器 2.1 打开浏览器 from selenium import webdriver # 打开浏览器 driver webdriver.Chrome()或者可以指定驱动路径 driver webdriver.Chrome(executable_pathrD:\Program Files\Python36\chromedriver.exe)关闭浏览器及其对应驱动 driver.quit()还可以通过上下文来控制其执行操作后自动关闭 with webdriver.Chrome(executable_pathchromedriver.exe) as driver:driver......2.2 打开网站 driver.get(https://blog.csdn.net/testleaf/article/details/123269042)延时3秒 import time time.sleep(3)2.3 定位元素 传说中的八大元素定位方法 driver.find_element_by_id() # 通过id属性定位(唯一)常用 driver.find_element_by_xpath() # 通过xpath表达式定位常用 driver.find_element_by_class_name() # 通过类名定位常用 driver.find_element_by_name() # 通过name属性定位 driver.find_element_by_tag_name() # 通过标签名定位 driver.find_element_by_css_selector() # 通过css选择器定位 driver.find_element_by_link_text() # 通过链接标签的text类容定位 driver.find_element_by_partial_link_text() # 通过匹配链接标签的text类容定位上面的都是找到第一个元素每一个方法都有对应多个元素的方法 如driver.find_elements_by_id() 示例1 driver.find_element_by_id(“toolbar-search-input”) 示例2 driver.find_element_by_name(“wd”) 2.4 操作元素 # 定位搜索框 element driver.find_element_by_id(toolbar-search-input) # 输入搜索内容 element.send_keys(web自动化框架selenium入门) # 定位搜索按钮 search_button driver.find_element_by_id(toolbar-search-button) # 点击搜索按钮 search_button.click()三、网页解析HTML、xpath 1.HTML HTML【Hyper Text Markup Language】超文本标记语言不是编程语言用来描述网页的。也称为网页的源码、html源码、html文档、document。 具体可以查看 网页的源码html源码html文档document HTML常用标签 HTML示例 !DOCTYPE html html langzh-CN headmeta charsetUTF-8titleTitle/titlestyle#table {border: 1px solid}.th {font-size: 20px}/style /head body div我是一个div标签/div h1我是一个大span stylecolor:red标签/span/h1 p/p a hrefhttps://blog.csdn.net/testleaftestleaf/a table idtabletheadtrth classth aaa字段1/thth classth字段2/thth classth字段3/th/tr/theadtbodytrtd1/tdtd2/tdtd3/td/tr/tbody /table form actionp用户名: input typetext/pp密码input typepassword/ppinput typesubmit/p /form /body /html2.xpath xpath一个解析html/xml的语言。 语法 选取节点 nodename 选取此节点的所有子节点/ 从根节点选取// 从匹配选择的当前节点选择文档中的节点不考虑它们的位置. 选取当前节点… 表示选取当前节点的父节点如//div[classactive]/.. 选取属性案例 //div 获取文档中的所有的div 谓语 用来查找特定的节点或者包含指定值的节点 谓语被包裹在中括号中//div[classactive]//div[classactive and idkw]//div[classactive or idkw]//div[classactive]/span[last()] 轴 用来查找相对于当前节点的节点 使用语法 轴名称::节点名称[谓语]ancestor 选取当前节点的所有父辈节点parent 选取当前节点的父节点如//div[classactive]/child::book…详见 https://www.w3school.com.cn/xpath/xpath_axes.asp 函数 text() 元素的text内容 //li[text()强烈推荐] contains(属性名/text(), value)包含的内容 //li[contains(class, ls)] 在浏览器中进行验证 $x(//div)四、selenium基本操作 Pycharm-Terminal操作 IPYTHON from selenium import webdriver driver webdriver.Chrome() driver.get(https://www.baidu.com) driver.quit() exit()浏览器-Console操作 window.scrollTo(0,100)1、元素定位八种方法 传说中的八大元素定位方法 driver.find_element_by_id() # 通过id属性定位(唯一)常用 driver.find_element_by_xpath() # 通过xpath表达式定位常用 driver.find_element_by_class_name() # 通过类名定位常用 driver.find_element_by_name() # 通过name属性定位 driver.find_element_by_tag_name() # 通过标签名定位 driver.find_element_by_css_selector() # 通过css选择器定位 driver.find_element_by_link_text() # 通过链接标签的text类容定位 driver.find_element_by_partial_link_text() # 通过匹配链接标签的text类容定位以上方法只会返回匹配到的第一个元素 返回的是 selenium.webdriver.remote.webelement.WebElement的对象 返回多个元素在element后加s即可例如driver.find_elements_by_xpath()使用时要小心 凡是elements的方法返回的是列表 from selenium import webdriverdriver webdriver.Chrome()# 打开百度页面 driver.get(https://www.baidu.com)# 1. 获取搜索框 search_input driver.find_element_by_id(kw) print(type(search_input)) print(1.搜索框的name属性值, search_input.get_attribute(name))# 2. 搜索按钮 search_btn driver.find_element_by_xpath(//input[value百度一下]) print(2.搜索按钮的id, search_btn.get_attribute(id))# 3. 百度logo logo driver.find_element_by_class_name(index-logo-src) print(3.百度logo的src, logo.get_attribute(src))# 4. 通过name属性定位搜索框 search_input_by_name driver.find_element_by_name(wd) print(4.搜索框的id, search_input_by_name.get_attribute(id))# 5. 热搜榜中的链接 hot_ul driver.find_element_by_xpath(//ul[idhotsearch-content-wrapper]) # hot_ul driver.find_element_by_xpath(//ul[text()热榜]) hot_a_s hot_ul.find_element_by_tag_name(a) print(5.热搜榜第一的标题是:, hot_a_s.text)# 6. 通过css选择器定位搜索框 search_input_by_css driver.find_element_by_css_selector(#kw) print(6.搜索框的name, search_input_by_css.get_attribute(name))# 7. 新闻栏目 el_a driver.find_element_by_link_text(新闻) print(7.新闻栏目的url, el_a.get_attribute(href))# 8. 通过部分text匹配新闻栏目 el_a1 driver.find_element_by_partial_link_text(新) print(8.新闻栏目的url, el_a1.get_attribute(href))driver.quit() 2、元素动态定位 问题元素的定位方式不确定可能是id可能是xpath需要通过不同的方式动态指定定位方法 办法加判断语句不需要我们写selenium底层定位就是这么做的 driver.find_element(by,value) driver.find_elements(by,value)by: 定位方式 value: 定位表达式 import time from selenium import webdriver from selenium.webdriver.common.by import Bydriver webdriver.Chrome()# 打开百度页面 driver.get(https://www.baidu.com)id_loc kw xpath_loc //input[idkw]e1 driver.find_element(By.ID, id_loc) # send_keys往输入框输入文本 e1.send_keys(我通过id定位) time.sleep(3)# e2 driver.find_element(By.XPATH, xpath_loc) e2 driver.find_element(xpath, xpath_loc) e2.clear() # 清空原有内容 e2.send_keys(我通过xpath定位)time.sleep(3) driver.quit()3、iframe切换 当页面中包含iframe时不能直接操作iframe中的元素需要先切换进iframe才行 selenium通过driver.switch_to.frame(frame_reference)来切换 selenium切换iframe有三种方式 1.通过webelement 使用webelement进行切换是最灵活的选择先定位到iframe然后切换到它 2.通过name或id iframe一般都会有id或name属性则可以使用该属性进行切换如果name或id在页面上不唯一name将切换到找到的第一个 3.通过iframe在页面中的索引进行切换(从0开始) 在浏览器console调试工具中使用window.ampInaboxIframes可以查询当前页面中的iframe退出iframedriver.switch_to.default_content() import time from selenium import webdriver# 使用with语句进行上下文管理 # 异常时也会关闭浏览器驱动 with webdriver.Chrome() as driver:driver.get(https://www.w3school.com.cn/tiy/t.asp?feg_html_form_radio)# 切换iframe# 1. webelement的方式# 先获取到iframeiframe driver.find_element_by_id(iframeResult)# 再切换到driver.switch_to.frame(iframe)# 2. name/id的方式# 直接通过name/id切换driver.switch_to.frame(iframeResult)# 3. 使用索引# 切换到第二个iframetime.sleep(1)driver.switch_to.frame(1)# 找到female单选框female driver.find_element_by_xpath(//input[valuefemale])print(female)# 4. 离开iframe,回到主页面driver.switch_to.default_content()driver.find_element_by_xpath(//a[text()运行代码])4、填充表单_填充文本框 import time from selenium import webdriverwith webdriver.Chrome() as driver:driver.get(https://www.baidu.com)# 搜索框定位search_input driver.find_element_by_id(kw)# element.send_keys(string)输入文本# 所有可输入的标签都适用search_input.send_keys(软件测试)# 搜索按钮定位search_btn driver.find_element_by_xpath(//input[value百度一下])# 点击# element.click()点击search_btn.click()time.sleep(3)5、填充表单_单选按钮 import time from selenium import webdriver with webdriver.Chrome() as driver:driver.get(https://www.w3school.com.cn/tiy/t.asp?feg_html_form_radio)# 切换iframeiframe driver.find_element_by_id(iframeResult)driver.switch_to.frame(iframe)# 找到female单选框female driver.find_element_by_xpath(//input[valuefemale])# 在元素上点击female.click() # 选中time.sleep(5)6、填充表单_下拉列表 下拉框有两种处理方法 1直接定位到要选中的option选项然后点击 2通过selenium.webdriver.support.ui.Select类 import time from selenium import webdriver from selenium.webdriver.support.ui import Selectwith webdriver.Chrome() as driver:driver.get(https://www.w3school.com.cn/tiy/t.asp?feg_html_elements_select)# 切换iframeiframe driver.find_element_by_id(iframeResult)driver.switch_to.frame(iframe)# 找到audi选项# 1. 通过option直接操作option driver.find_element_by_xpath(//option[valueaudi])option.click()time.sleep(1)# 2. 通过select类# 找到selectselect Select(driver.find_element_by_xpath(//select[namecars]))## # 选中索引为1的选项,索引从0开始select.select_by_index(1)time.sleep(1)## # 选中value等于audi的选项select.select_by_value(audi)time.sleep(1)## # 选中option的文本为Volvo的选项select.select_by_visible_text(Volvo)time.sleep(3)7、切换窗口和标签页 webdriver 不区分窗口和标签页。打开一个新的标签页或者窗口selenium会使用窗口句柄来处理它。 每个窗口都有一个唯一的标识符该标识符在单个会话中保持持久性。 1获取当前窗口句柄driver.current_window_handle 2切换窗口或标签页通过循环遍历的方式来切换 import time from selenium import webdriver with webdriver.Chrome() as driver:driver.get(https://www.baidu.com)# 找到搜索框search_input driver.find_element_by_id(kw)search_input.send_keys(图片)# 点击搜索按钮driver.find_element_by_id(su).click()time.sleep(1)# 获取原窗口的handleoriginal_window driver.current_window_handleprint(当前窗口句柄, original_window)print(窗口的title, driver.title)# 选取第一个结果并点击driver.find_element_by_xpath(//div[id3001]//a).click()# time.sleep(1)for handle in driver.window_handles:if handle ! original_window:# 切换到新窗口driver.switch_to.window(handle)break# 打印当前窗口句柄print(新打开的搜索页面句柄, driver.current_window_handle)print(新打开的页面的title, driver.title)time.sleep(5)8、显式等待 浏览器渲染页面的时候需要时间如果没有渲染完成就对元素进行定位将会找不到到该元素 所以需要加延时进行等待有三种等待方式 1time.sleep() 前面已经反复使用了等待时间固定不稳定等待时间多半不确定 2显式等待 显式等待就是在元素操作前循环判断操作的条件是否满足满足后再操作 selenium通过selenium.webdriver.support.ui.WebDriverWait类的对象来实现显式等待webDriverWait类实例化时可以接收3个参数 driver webdriver对象timeout超时时间最多等待多少秒poll_frequency: 检查频率默认0.5秒 until方法接受1个参数 conditions条件在selenium.webdriver.support.expected_conditions 模块中 常见条件 presence_of_element_located元素存在于dom中 visibility_of_element_located元素可见 element_to_be_clickable元素可点击 element_to_be_selected元素可选择 实例化条件需要传入一个定位参数是一个二元元组(by, loc_expression) import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By import selenium.webdriver.support.expected_conditions as ECwith webdriver.Chrome() as driver:driver.get(https://www.baidu.com)# 找到搜索框search_input driver.find_element_by_id(kw)search_input.send_keys(图片)# 点击搜索按钮driver.find_element_by_id(su).click()# 获取原窗口的idoriginal_window driver.current_window_handleprint(当前窗口句柄, original_window)print(窗口的title, driver.title)# 选取第一个结果并点击## WebDriverWait(driver, timeout3).until(# EC.visibility_of_element_located((By.XPATH, //div[id3001]//a))# ).click()s_time time.time()btn WebDriverWait(driver, timeout3).until(EC.visibility_of_element_located((By.ID, 3001)))btn.click()e_time time.time()print(e_time-s_time)# WebDriverWait(driver, timeout3).until(# EC.visibility_of_element_located((id, 3001))# ).click()# 会等待id为3001的元素可见timeout3表示最多等待3秒钟超时就抛出异常# driver.find_element_by_xpath(//div[id3001]//a).click()# time.sleep(1)for handle in driver.window_handles:if handle ! original_window:# 切换到新窗口driver.switch_to.window(handle)break# 打印当前窗口句柄print(新打开的搜索页面句柄, driver.current_window_handle)print(新打开的页面的title, driver.title)time.sleep(5)9、隐式等待 3隐式等待 隐式等待本质上是设置了一个全局等待时间WebDriver在试图查找任何元素时都会轮询一定时间默认情况下隐式等待是禁用的。 警告不要混用隐式等待和显示等待这样会导致不可预测的等待时间。 例如隐式等待设置10秒显式等待设置15秒可能导致在20秒后发生超时 隐式等待是告诉WebDriver如果在查找一个或多个不是立即可用的元素时轮询DOM一段时间。默认设置为0表示禁用。一旦设置好隐式等待就会被设置为会话的生命周期。 import time from selenium import webdriverwith webdriver.Chrome() as driver:# 设置隐式等待5秒driver.implicitly_wait(5)driver.get(https://www.baidu.com)# 找到搜索框search_input driver.find_element_by_id(kw)search_input.send_keys(图片)# 点击搜索按钮driver.find_element_by_id(su).click()# 获取原窗口的idoriginal_window driver.current_window_handleprint(当前窗口句柄, original_window)print(窗口的title, driver.title)# 选取第一个结果并点击driver.find_element_by_xpath(//div[id3001]//a).click()for handle in driver.window_handles:if handle ! original_window:# 切换到新窗口driver.switch_to.window(handle)break# 打印当前窗口句柄print(新打开的搜索页面句柄, driver.current_window_handle)print(新打开的页面的title, driver.title)time.sleep(5)10、警告框 WebDriver提供了一个API用于处理JavaScript提供的三种类型的原生弹窗消息 1Alerts警告框 import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECwith webdriver.Chrome() as driver:driver.get(https://www.w3school.com.cn/tiy/t.asp?fjs_alert)driver.switch_to.frame(iframeResult)button WebDriverWait(driver, timeout3).until(EC.visibility_of_element_located((xpath, //button)))# 有时候需要结合sleep来处理# time.sleep(1)button.click()# time.sleep(3)# 等待alert弹出alert WebDriverWait(driver, timeout3).until(EC.alert_is_present())# time.sleep(1)# alert driver.switch_to.alert# 获取弹出框文本text alert.textprint(text)time.sleep(1)# # 确认alert.accept()time.sleep(1)11、confirm确认框 2 confirm确认框 与警告框不同确认框还有取消按钮 import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECwith webdriver.Chrome() as driver:driver.get(https://www.w3school.com.cn/tiy/t.asp?fjs_confirm)driver.switch_to.frame(iframeResult)button WebDriverWait(driver, timeout3).until(EC.visibility_of_element_located((xpath, //button)))button.click()# # 等待confirm弹出WebDriverWait(driver, timeout3).until(EC.alert_is_present())## # 获取alertalert driver.switch_to.alert## # 获取弹出框文本text alert.textprint(text)time.sleep(2)# # 取消# 点击取消后 当前的alert对象就会被销毁alert.dismiss()# alert.accept() 确认time.sleep(2)12、prompt提示框 3prompt提示框 还可以输入文本 import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC with webdriver.Chrome() as driver:driver.get(https://www.w3school.com.cn/tiy/t.asp?fjs_prompt)driver.switch_to.frame(iframeResult)button WebDriverWait(driver, timeout3).until(EC.visibility_of_element_located((xpath, //button)))# 避免js没有绑定出现意外问题加一秒延时time.sleep(1)button.click()# 等待alert弹出WebDriverWait(driver, timeout3).until(EC.alert_is_present())# 获取alertalert driver.switch_to.alert# 输入信息alert.send_keys(testleaf)time.sleep(3)# 确认alert.accept()# alert.dismiss() 取消time.sleep(3)13、鼠标操作动作链 鼠标是通过使用底层接口执行的需要调用ActionChains对象来执行对应的方法。 1clickAndHold它将移动到该元素然后在给定元素的中间单击(不释放) 2contextClick此方法首先将鼠标移动到元素的位置, 然后在给定元素执行上下文点击(右键单击) 3doubleClick它将移动到该元素, 并在给定元素的中间双击 4moveToElement此方法将鼠标移到元素的中间. 执行此操作时, 该元素也会滚动到视图中 5moveByOffset此方法将鼠标从其当前位置(或0,0)移动给定的偏移量. 如果坐标在视图窗口之外, 则鼠标最终将在浏览器窗口之外 6dragAndDrop此方法首先在源元素上单击并按住然后移动到目标元素的位置后释放鼠标 7release此操作将释放按下的鼠标左键. 如果WebElement转移了, 它将释放给定WebElement上按下的鼠标左键 import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECwith webdriver.Chrome() as driver:driver.get(rfile://D:\project\action.html)div WebDriverWait(driver, timeout3).until(EC.visibility_of_element_located((xpath, //div[οnmοuseοvermOver(this)])))# 移动到指定元素 move_to_elementwebdriver.ActionChains(driver).move_to_element(div).perform()time.sleep(2)# 移开多大位置x,y move_by_offsetwebdriver.ActionChains(driver).move_by_offset(xoffset500, yoffset500).perform()time.sleep(2)# 点住不放 click_and_holddiv driver.find_element_by_xpath(//div[οnmοusedοwnmDown(this)])webdriver.ActionChains(driver).click_and_hold(div).perform()time.sleep(2)# 松开鼠标 releasewebdriver.ActionChains(driver).release(div).perform()time.sleep(2)# double_click 双击button driver.find_element_by_xpath(//button[ondblclick])webdriver.ActionChains(driver).double_click(button).perform()time.sleep(2)# drag 将div1拖拽到div2上div1 driver.find_element_by_id(draggable)div2 driver.find_element_by_id(droppable)webdriver.ActionChains(driver).drag_and_drop(div1, div2).perform()time.sleep(3)# contextClick 点击鼠标右键div driver.find_element_by_xpath(//div[οnmοusedοwnwhichButton(event)])webdriver.ActionChains(driver).context_click(div).perform()time.sleep(2)14、执行js代码_滚动1 selenium执行js有几个方法这里我们使用最常用的方法execute_script import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECwith webdriver.Chrome() as driver:driver.get(https://image.baidu.com)search_input WebDriverWait(driver, 3).until(EC.visibility_of_element_located((id, kw)))search_input.send_keys(软件测试)WebDriverWait(driver, 3).until(EC.element_to_be_clickable((xpath, //input[value百度一下]))).click()time.sleep(3)# 滚动到(0px,100px)的位置driver.execute_script(window.scrollTo(0,100))time.sleep(1)driver.execute_script(window.scrollTo(0,200))time.sleep(1)driver.execute_script(window.scrollTo(0,300))time.sleep(3)# 移动到底部driver.execute_script(window.scrollTo(0,document.body.scrollHeight))time.sleep(3)# 移动到顶部driver.execute_script(window.scrollTo(0,0))time.sleep(3)15、执行js代码_滚动2 selenium执行js有几个方法这里我们使用最常用的方法execute_script 执行js时还可以传递参数给js脚本 下面的案例 打开页面并滚动到指定的元素可见为止 下面的代码 div 被传递给了arguments通过切片的方式可以取出 import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECwith webdriver.Chrome() as driver:driver.get(rfile://D:\project\scroll.html)time.sleep(2)div driver.find_element_by_xpath(//div)# 移动到元素的底端与当前窗口的底部对齐driver.execute_script(arguments[0].scrollIntoView(false);, div)time.sleep(2)# 移动到元素的顶端与当前窗口的顶端对齐driver.execute_script(arguments[0].scrollIntoView();, div)time.sleep(2)16、上传操作_input上传 selenium只支持input元素的上传直接使用send_keys将文件绝对地址写入元素即可 import time from selenium import webdriverwith webdriver.Chrome() as driver:driver.get(https://www.baidu.com)span driver.find_element_by_xpath(//span[classsoutu-btn])span.click()time.sleep(1)input driver.find_element_by_xpath(//input[classupload-pic])input.send_keys(rD:\project\find.jpg)# 有可能还需要提交的操作百度是不需要time.sleep(10)17、上传操作_非input上传_pywinauto 很多时候页面不是使用input来进行文件上传这是就需要通过其他第三方包来操作系统界面 1pywinauto 缺点 只能在windwows上使用 优点可以选择多个文件路径中有中文也可以 import timefrom selenium import webdriver from pywinauto.keyboard import send_keyswith webdriver.Chrome() as driver:driver.get(https://www.baidu.com)span driver.find_element_by_xpath(//span[classsoutu-btn])span.click()time.sleep(1)# select_span driver.find_element_by_xpath(//span[text()选择文件])select_span driver.find_element_by_xpath(//div[classupload-wrap])# 点击打开选择文件窗口select_span.click()time.sleep(3)# 选择文件send_keys(rD:\project\find.jpg)time.sleep(1)# # 选择确定send_keys({ENTER})time.sleep(10)18、上传操作_非input上传_pyautogui 很多时候页面不是使用input来进行文件上传这里就需要通过其他第三方包来操作系统界面 2pyautogui 缺点 只能选择一个文件文件路径有中文会出问题 优点跨平台(windows,mac,linux) import timefrom selenium import webdriver import pyautoguiwith webdriver.Chrome() as driver:driver.get(https://www.baidu.com)span driver.find_element_by_xpath(//span[classsoutu-btn])span.click()time.sleep(1)# select_span driver.find_element_by_xpath(//span[text()选择文件])select_span driver.find_element_by_xpath(//div[classupload-wrap])# 点击打开选择文件窗口select_span.click()time.sleep(3)# 选择文件pyautogui.write(rD:\project\find.jpg)time.sleep(1)# 选择确定pyautogui.press(enter, 2)time.sleep(10)五、selenium调整窗口大小 selenium调整窗口到指定大小 driver.set_window_size(900,1000)浏览器最大化 driver.maximize_window() 六、判断元素是否允许被操作 driver.find_element_by_name(XXX).is_enabled() # 是否可以编辑或者按钮是否可以点击driver.find_element_by_name(XXX).is_displayed() # 判断元素是否显示elementdriver.find_element_by_name(XXX).is_selected() # 判断元素是否选中状态七、获取某个元素的html driver.find_element_by_id(XXX).get_attribute(innerHTML)八、其他问题 1、svg定位 问题描述 使用xpath方法对svg下元素进行定位会发现无法定位到svg下的元素 driver.find_element(xpath/html/body/div[19]/svg)解决方法1【错误】 从svg元素开始下面的元素都要以*[name()‘svg element’] 这种形式进行编写 driver.find_element(xpath/html/body/div[19]/*[name()svg]/*[name()path])会发现仍然定位不到 解决办法2【正确】 绝对路径的话*[name()svg]前面得加双斜杠不然定位不到 driver.find_element(xpath/html/body/div[19]//*[name()svg])相对路径的话*[name()svg]前就不用加双斜杠只用单斜杠 driver.find_element(xpath//*[iduserinfo]/*[name()svg]/*[name()use])2、处理chrome显示通知弹框 使用chrome打开weibo.com会出现以下界面的弹出框 这东西不属于页面alert弹框而是属于浏览器的设置项。 要关掉它需要对浏览器进行属于配置。具体见下面脚本 from selenium import webdriveroptions webdriver.ChromeOptions() prefs {profile.default_content_setting_values:{notifications:2} } options.add_experimental_option(prefs,prefs) driver webdriver.Chrome(options options) driver.get(https://blog.csdn.net/testleaf/article/details/123269042)3、获取元素的文本 ①element.text ②get_attribute(“textContent”) 优点可以获取隐藏元素的文本 缺点IE不支持获取有些元素的文本时结果中带有空字符串没有尝试过 ③get_attribute(innerText) 优点可以获取隐藏元素的文本 缺点FireFox不支持每个博客能搜到的都说这个缺点但实际操作发现可以获取到每次所需的文本 4、切换网址 直接进行切换就可以了如下 driver.get(https://blog.csdn.net/testleaf/article/details/123269042) time.sleep(2) driver.get(https://blog.csdn.net/testleaf/article/details/123302863)5、find_element_by_xpath()被弃用解决方案 from selenium.webdriver.common.by import By from selenium import webdriver driver webdriver.Chrome() #启动chromedriver driver.get(http://www.baidu.com) #打开http://www.baidu.com driver.find_element(By.XPATH,//div[classdetail-item-ctn][1]).click() #点击按钮免责声明 1.编写此文是为了更好地学习selenium的使用如果损害了有关人的利益请联系删除 2.如果文中描述欠妥请在评论中进行指正 3.文字编写不易若感觉有用点赞收藏关注会让博主很开心哦 4.此外本文支持任何形式的转载转载请注明出处非常感谢 本文源自https://blog.csdn.net/testleaf/article/details/123269042
http://www.hkea.cn/news/14563522/

相关文章:

  • 长春模板建站公司做外贸网站需要注意些什么手续
  • 免费推广网站入口新公司网站建设分录
  • 做外贸生意上哪个网站怎么建设网站阿里云
  • 做一个卖车的网站该怎么做国外电商网站建设
  • 深圳市年年卡网络科技有限公司重庆做网站及优化报价
  • 大理网站制作wordpress 压缩包
  • 番禺网站建设开发iis如何做网站管理器
  • 磐石市住房和城乡建设局网站网站建设需要会代码吗
  • 在百度做推广需要网站吗陕西交通建设网站
  • 北京怎样建设公司网站网络公司是什么意思
  • 营销型网站.适应移动端网站模板
  • 教育网站开发用例图网站的策划方案怎么写
  • 东莞网站推广渠道有哪些网站后台管理系统 英文
  • 在线视频教学网站建设北京同仁医院眼科医生免费咨询
  • 怎么做公司门户网站软文推广发稿平台
  • 嘉兴网站建设全包开发工具和开发平台
  • 深圳找人做网站湖南网站建设案例
  • 百度网站建立品牌网站设计建设
  • 宁夏住房和城乡建设厅门户网站制作宣传图片的软件
  • 一人有限责任公司seo快速排名公司
  • 贵阳网站建设策划方案广州小程序技术开发
  • 沈阳市于洪区建设局网站网站上传到空间
  • 网站gif图标浙江网站建设价位
  • 网站建设域名是什么意思wordpress linux 静态
  • 建设购物网站多少钱滨州网站建设 远洋科技
  • 宿州哪有做网站的做高清图的网站
  • 门户网站案例余姚厂家高端网站设计
  • 有一个域名做网站关于公司网络优化方案
  • 怎样给建设的网站提意见免费模板网站下载
  • 上海徐汇做网站青岛活动策划公司