1 先来一个selenium简单demo
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
el = driver.find_element_by_name('wd')
el.send_keys('F12打开开发者工具')
driver.find_element_by_id('su').click()
time.sleep(3)
driver.quit()
简单定位元素
el = driver.find_element("name",'wd')
el = driver.find_element("id", 'kw')
这两句代码实现定位元素的效果,打开开发者工具->查看器,点击要定位的位置,这里又有id又有name,所以可以通过name或id定位到这个搜索框。
上面就不解释了,我这篇主要记录怎么看底层代码,主要是下面的内容。
2 底层代码实现示例
第一句
driver = webdriver.Chrome()
按住ctrl,然后点击函数Chrome,进入Chrome()的实现代码,如下图 所以实际上这句代码是这样的:
driver = WebDriver(executable_path="chromedriver")
还要加导入:
from selenium.webdriver.chrome.webdriver import WebDriver
第二句
driver.get('http://www.baidu.com')
按住ctrl,点击get,到了这个方法的实现代码,如下图: 所以实际上这句代码是这样的:
driver.execute(Command.GET, {'url': 'http://www.baidu.com'})
import选择
Command.GET下面会有红曲线,找不到这个东西,会发现需要导入,导入出现很多选择,如下图,怎么知道导入哪个? 右击打开的源代码文件,点击copy path,会出现该py文件的路径窗口,所以就知道实际应该import哪个了
from selenium.webdriver.chrome.webdriver import WebDriver
继续上面的,我们走到了
driver.execute(Command.GET, {'url': 'http://www.baidu.com'})
又可以按住ctrl,点击Command,又会出现下图,发现Command.GET实际上就是"get",所以又可以变成这句:
driver.execute("get", {'url': 'http://www.baidu.com'})
第三句
el = driver.find_element_by_name('wd')
按住ctrl,点击find_element_by_name,到了下图: 所以这句可以变成
from selenium.webdriver.common.by import By
el = driver.find_element(by=By.NAME, value='wd')
再变成
el = driver.find_element("name", 'wd')
第四句
el.send_keys('F12打开开发者工具')
按住ctrl,点击send_keys
el._execute("sendKeysToElement",
{'text': "".join(keys_to_typing('F12打开开发者工具')),
'value': keys_to_typing('F12打开开发者工具')})
第五句
driver.find_element_by_id('su').click()
与第三句一样的步骤,先变成
driver.find_element("id",'su').click()
再按住ctrl,点击click()
driver.find_element("id",'su')._execute(Command.CLICK_ELEMENT)
再变成
driver.find_element("id",'su')._execute("clickElement")
最终代码:
包含了转换的过程。
import time
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.utils import keys_to_typing
from selenium.webdriver.remote.command import Command
driver = WebDriver(executable_path="chromedriver")
driver.execute("get", {'url': 'http://www.baidu.com'})
el = driver.find_element("name", 'wd')
time.sleep(3)
el._execute("sendKeysToElement",
{'text': "".join(keys_to_typing('F12打开开发者工具')),
'value': keys_to_typing('F12打开开发者工具')})
driver.find_element("id",'su')._execute("clickElement")
time.sleep(10)
driver.service.stop()
|