python中selenium模块

1.声明浏览器对象

from selenium import webdriver
browser = webdriver.Firefox()
#browser = webdriver.Chrome()
#browser = webdriver.Safari()
#browser = webdriver.Edge()
#browser = webdriver.PhantomJS()
---------------------------------------------------------------------------

FileNotFoundError                         Traceback (most recent call last)

C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\common\service.py in start(self)
     75                                             stderr=self.log_file,
---> 76                                             stdin=PIPE)
     77         except TypeError:


C:\ProgramData\Anaconda3\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
    755                                 errread, errwrite,
--> 756                                 restore_signals, start_new_session)
    757         except:


C:\ProgramData\Anaconda3\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)
   1154                                          os.fspath(cwd) if cwd is not None else None,
-> 1155                                          startupinfo)
   1156             finally:


FileNotFoundError: [WinError 2] 系统找不到指定的文件。


During handling of the above exception, another exception occurred:


WebDriverException                        Traceback (most recent call last)

<ipython-input-7-6fb254ac3352> in <module>()
      1 from selenium import webdriver
----> 2 browser = webdriver.Firefox()
      3 #browser = webdriver.Chrome()
      4 #browser = webdriver.Safari()
      5 #browser = webdriver.Edge()


C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\firefox\webdriver.py in __init__(self, firefox_profile, firefox_binary, timeout, capabilities, proxy, executable_path, options, service_log_path, firefox_options, service_args, desired_capabilities, log_path, keep_alive)
    162                 service_args=service_args,
    163                 log_path=service_log_path)
--> 164             self.service.start()
    165 
    166             capabilities.update(options.to_capabilities())


C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\common\service.py in start(self)
     81                 raise WebDriverException(
     82                     "'%s' executable needs to be in PATH. %s" % (
---> 83                         os.path.basename(self.path), self.start_error_message)
     84                 )
     85             elif err.errno == errno.EACCES:


WebDriverException: Message: 'geckodriver' executable needs to be in PATH. 

WebDriverException: Message: ‘geckodriver’ executable needs to be in PATH.解决方法

- 1.确定错误类型
    - 如果你的selenium是3.X版本的,火狐浏览器需要geckodriver这个组件的支持,而谷歌浏览器需要chromedriver的支持,2.X版本则不需要。
    - 使用selenium自动打开Google浏览器错误提示:
        - WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
    -  打开火狐浏览器错误提示:
        - WebDriverException: Message: 'geckodriver' executable needs to be in PATH
- 2.下载组件
    - 如果是使用selenium3.X版本的,火狐浏览器需要网上下载geckodriver,这给出Windows64位下载地址:https://pan.baidu.com/s/1gfP8CON,
        其他系统的以及最新的geckodriver可以到:https://github.com/mozilla/geckodriver/releases下载
    - 谷歌浏览器chromedriver下载地址:http://npm.taobao.org/mirrors/chromedriver/
- 3.解压文件,添加到文件夹
     - Windows下,下载好软件直接解压,将getckodriver.exe放至python.exe的目录下吧。再次输入以下代码,运行一下,看是不是自动打开了火狐浏览器。
from selenium import webdriver
browser = webdriver.Firefox()
---------------------------------------------------------------------------

WebDriverException                        Traceback (most recent call last)

<ipython-input-1-2cfc00440994> in <module>()
      1 from selenium import webdriver
----> 2 browser = webdriver.Firefox()


C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\firefox\webdriver.py in __init__(self, firefox_profile, firefox_binary, timeout, capabilities, proxy, executable_path, options, service_log_path, firefox_options, service_args, desired_capabilities, log_path, keep_alive)
    172                 command_executor=executor,
    173                 desired_capabilities=capabilities,
--> 174                 keep_alive=True)
    175 
    176         # Selenium remote


C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in __init__(self, command_executor, desired_capabilities, browser_profile, proxy, keep_alive, file_detector, options)
    155             warnings.warn("Please use FirefoxOptions to set browser profile",
    156                           DeprecationWarning, stacklevel=2)
--> 157         self.start_session(capabilities, browser_profile)
    158         self._switch_to = SwitchTo(self)
    159         self._mobile = Mobile(self)


C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in start_session(self, capabilities, browser_profile)
    250         parameters = {"capabilities": w3c_caps,
    251                       "desiredCapabilities": capabilities}
--> 252         response = self.execute(Command.NEW_SESSION, parameters)
    253         if 'sessionId' not in response:
    254             response = response['value']


C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))


C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):


WebDriverException: Message: newSession

出现WebDriverException: Message: newSession解决方案如下:

  • 1、更新pip至最新
  • 2、更新selenium至最新
  • 3、下载 geckodriver最新版,放至Firefox安装的文件夹内,并把该路径设置为环境变量
from selenium import webdriver
browser = webdriver.Firefox()

2:访问页面

  • 将打开页面,并输出相应的页面内容后,关闭页面

3:查找单个元素

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Firefox()
browser.get("http://taobao.com")
#打开淘宝页面

first = browser.find_elements_by_id("q")
first1 = browser.find_elements_by_id("J_SiteFooter")
second = browser.find_element_by_css_selector("#q")
third = browser.find_element(By.ID,"q")#不推荐此用法,尽可能使用find_element_by_*方法。 
    
print(first,first1,second,third)

browser.close()
[<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="f9c518f2-6d30-4ad6-abe9-7d3bd92bf2d0", element="6f762bf9-cce9-486b-b3e6-624289254159")>] [<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="f9c518f2-6d30-4ad6-abe9-7d3bd92bf2d0", element="53fcd778-3893-4667-864c-b421d69f5db3")>] <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="f9c518f2-6d30-4ad6-abe9-7d3bd92bf2d0", element="6f762bf9-cce9-486b-b3e6-624289254159")> <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="f9c518f2-6d30-4ad6-abe9-7d3bd92bf2d0", element="6f762bf9-cce9-486b-b3e6-624289254159")>

browser.find_element方法:

  • browser.find_element(by=‘id’, value=None):
    • element = driver.find_element(By.ID, ‘foo’)
  • browser.find_element_by_class_name(name):
    • element = driver.find_element_by_class_name(‘foo’)
  • browser.find_element_by_css_selector(css_selector):
    • element = driver.find_element_by_css_selector(’#foo’)
  • browser.find_element_by_id(id_):
    • element = driver.find_element_by_id(‘foo’)
  • browser.find_element_by_link_text(link_text):
    • element = driver.find_element_by_link_text(‘Sign In’)
  • browser.find_element_by_name(name):
    • element = driver.find_element_by_name(‘foo’)
  • browser.find_element_by_partial_link_text(link_text):
    • element = driver.find_element_by_partial_link_text(‘Sign’)
  • browser.find_element_by_tag_name(name):
    • element = driver.find_element_by_tag_name(‘h1’)
  • browser.find_element_by_xpath(xpath):
    • element = driver.find_element_by_xpath(’//div/td[1]’)
  • browser.find_elements(by=‘id’, value=None):
    • elements = driver.find_elements(By.CLASS_NAME, ‘foo’)

4:查找多个元素

from selenium import webdriver
from selenium.webdriver.common.by import By

browser=webdriver.Firefox()
browser.get("http://www.taobao.com")

lis=browser.find_element_by_css_selector("li")
lis_c=browser.find_element(By.CSS_SELECTOR,"li")

print(lis,lis_c)

browser.close()
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7914e705-d318-48ca-89ca-6cd8640ad7e2", element="0ad52df5-ef05-498f-8ec2-d32c0f90379d")> <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7914e705-d318-48ca-89ca-6cd8640ad7e2", element="0ad52df5-ef05-498f-8ec2-d32c0f90379d")>

5:元素的交互操作

  • 对获取到的元素调用交互方法
from selenium import webdriver
import time
#导入模块

browser = webdriver.Firefox()
browser.get("http://taobao.com")
#访问淘宝页面

get_element = browser.find_element_by_id("q")
#获取搜索框

get_element.send_keys("iphone")
#在搜索栏中输入iPhone
time.sleep(10)
#等待十秒

get_element.clear()
get_element.send_keys("ipad")b


button = browser.find_element_by_class_name("btn-search")
#获取搜索按钮
button.click()
#点击
time.sleep(10)

browser.close()
  • 将打开火狐浏览器,访问淘宝页面,在搜索栏中搜索iPhone后等待十秒后,清除,继续搜索iPad,点击搜索按钮后跳转页面,最后关闭页面。

6:交互动作

  • 把动作附加到交互链中
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.alert import Alert
import time

browser = webdriver.Firefox()
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)

browser.switch_to.frame("iframeResult")
#切换到目标元素所在的frame
source = browser.find_element_by_id("draggable")
#确定拖拽目标的起点
target = browser.find_element_by_id("droppable")
#确定拖拽目标的终点

#形成动作链
actions = ActionChains(browser)
actions.drag_and_drop(source,target)
#执行
actions.perform()

t = browser.switch_to_alert()
print(t.text)
t.accept()
time.sleep(10)
browser.close()
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:23: DeprecationWarning: use driver.switch_to.alert instead


dropped
  • 1.先用switch_to_alert()方法切换到alert弹出框上
  • 2.可以用text方法获取弹出的文本 信息
  • 3.accept()点击确认按钮
  • 4.dismiss()相当于点右上角x,取消弹出框

7:执行javascript

  • 下面的例子是执行就是,拖拽进度条到底,并弹出提示框
from selenium import webdriver

browser=webdriver.Firefox()
browser.get("https://www.zhihu.com/explore")

browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
browser.execute_script("alert('To Button')")

browser.close()

8:获取元素信息

  • 获取属性
from selenium import webdriver

browser=webdriver.Firefox()
url = "https://www.zhihu.com/explore"
browser.get(url)

logo = browser.find_element_by_class_name("ZhiHuLogoLink")
print(logo)
#print(logo.get_attribute("class")) 

browser.close()
  • 获取文本值
browser=webdriver.Firefox()

url = "https://www.zhihu.com/explore"
browser.get(url)

logo=browser.find_element_by_id("zh-top-link-logo")
print(logo)
print(logo.text)

browser.close()
  • 获取ID、位置、大小和标签名
browser=webdriver.Firefox()

url = "https://www.zhihu.com/explore"
browser.get(url)

logo = browser.find_element_by_id("zh-top-link-logo")
print(logo)
#id
print(logo.id)
#位置
print(logo.location)
#标签名
print(logo.tag_name)
#大小
print(logo.size)

browser.close()

9:等待

  • 隐式等待
    当使用了隐式等待执行测试的时候,如果webdriver没有在DOM中找到元素,将继续等待,超过设定的时间后则抛出找不到元素的异常,换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认时间为0.
from selenium import webdriver

browser = webdriver.Firefox()
url = "https://www.zhihu.com/explore"
browser.get(url)

browser.implicitly_wait(10)
logo = browser.find_element_by
print(logo)
  • 显示等待
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Firefox()
url = "https://www.taobao.com"
browser.get(url)

wait = WebDriverWait(browser,10)
input = wait.until(EC.presence_of_element_located((By.ID,"q")))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".btn-search")))
print(input,button)

browser.close()

10:浏览器的前进和后退

from selenium import webdriver
import time

browser=webdriver.Firefox()
browser.get("https://www.taobao.com")
browser.get("https://www.baidu.com")
browser.get("https://www.python.org")
browser.back()
time.sleep(1)
browser.forward()
browser.close()

11:cookies的处理

from selenium import webdriver
import time

browser=webdriver.Firefox()
browser.get("https://www.zhihu.com/explore")
print(browser.get_cookies())
browser.add_cookie({"name":"name","domain":"www.zhihu.com","value":"germey"})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
browser.close()

12:选项卡管理

from selenium import webdriver
import time

browser=webdriver.Firefox()
browser.get("https://www.zhihu.com/explore")
browser.execute_script("window.open()")
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])
browser.get("https://www.taobao.com")
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
browser.get("https://python.org")
browser.close()

13:异常处理

from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException

browser=webdriver.Firefox()
try:
    browser.get("https://www.zhihu.com/explore")
except TimeoutException:
    print("Time out")
try:
    browser.find_element_by_id("hello")
except NoSuchElementException:
    print("No Element")
finally:
    browser.close()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值