1.声明浏览器对象
from selenium import webdriver
browser = webdriver. Firefox( )
---------------------------------------------------------------------------
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" )
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" )
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" )
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)
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( )
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. 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( )