*Selenium は主に自動テストに使用され、複数のブラウザをサポートしています。主に JavaScript レンダリングの問題を解決するためにクローラーで使用されます。
リクエストと urllib が Web ページのコンテンツを正常に取得できない場合、ブラウザをシミュレートします
注: 1. Python ファイル名またはパッケージ名に selenium という名前を付けないでください。 from selenium import webdriver
browser = webdriver.Chrome()
単一要素
from selenium import webdriver browser = webdriver.Chrome() browser.get('https://www.taobao.com') print(browser.page_source) # browser.page_source是获取网页的全部htmlbrowser.close()
from selenium import webdriver browser = webdriver.Chrome() browser.get('https://www.taobao.com') input_first = browser.find_element_by_id('q') input_second = browser.find_element_by_css_selector('#q') input_third = browser.find_element_by_xpath('//*[@id="q"]') print(input_first,input_second,input_third) browser.close()
find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_element_by_tag_name find_element_by_class_name find_element_by_css_selector
from selenium import webdriverfrom selenium.webdriver.common.by import By browser = webdriver.Chrome() browser.get('https://www.taobao.com') input_first = browser.find_element(BY.ID,'q')#第一个参数传入名称,第二个传入具体的参数print(input_first) browser.close()
input_first = browser.find_elements_by_id('q')
その他の操作: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement#属性、スクリーンショットを含めることができます、など
5. インタラクションアクション、ブラウザーを操作してアクションを実行し、ドラッグアンドドロップアクションをシミュレートし、シリアル実行のためにアクションチェーンにアクションをアタッチします
from selenium import webdriver import timebrowser = webdriver.Chrome() browser.get('https://www.taobao.com') input = browser.find_element_by_id('q')#找到搜索框input.send_keys('iPhone')#传送入关键词time.sleep(5) input.clear()#清空搜索框input.send_keys('男士内裤') button = browser.find_element_by_class_name('btn-search')#找到搜索按钮button.click()
その他の操作: http://selenium-python. readthedocs.io/api.html#module-selenium .webdriver.common.action_chains
6. JavaScript を実行します
進行状況バーのドロップダウンなど、一部のアクションは API を提供していない場合があります。コードfrom selenium import webdriverfrom selenium.webdriver import ActionChains#引入动作链browser = webdriver.Chrome() url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'browser.get(url) browser.switch_to.frame('iframeResult')#切换到iframeResult框架source = browser.find_element_by_css_selector('#draggable')#找到被拖拽对象target = browser.find_element_by_css_selector('#droppable')#找到目标actions = ActionChains(browser)#声明actions对象actions.drag_and_drop(source, target) actions.perform()#执行动作
属性を取得from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')
from selenium import webdriverfrom selenium.webdriver import ActionChains browser = webdriver.Chrome() url = 'https://www.zhihu.com/explore'browser.get(url) logo = browser.find_element_by_id('zh-top-link-logo')#获取网站logoprint(logo) print(logo.get_attribute('class')) browser.close()
from selenium import webdriver browser = webdriver.Chrome() url = 'https://www.zhihu.com/explore'browser.get(url) input = browser.find_element_by_class_name('zu-top-add-question') print(input.text)#input.text文本值browser.close()
フレームは独立したWebページに相当します. 親カテゴリのネットワーク フレームでサブカテゴリを検索する場合は、サブカテゴリのフレームに切り替える必要があります。親クラスを見つけたい場合は、サブクラスも最初に切り替える必要があります
待機中
。暗黙的待機を使用してテストを実行すると、WebDriver が DOM 内で要素を見つけられなかった場合、設定された時間を超えると要素が見つからないという例外がスローされます。要素が検索されるか、要素がすぐに表示されない場合、暗黙的な待機は DOM を検索する前に一定時間待機します。
待機条件と最大待機時間を指定します。プログラムは待機時間内に条件が満たされるかどうかを判断し、満たされない場合は待機を続けますfrom selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'browser.get(url)
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.id)#获取idprint(input.location)#获取位置print(input.tag_name)#获取标签名print(input.size)#获取大小browser.close()
11. 進むと戻る - 異なる Web ページを閲覧するためのブラウザーの進むと戻るを実現します
from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementException browser = webdriver.Chrome() 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_css_selector('#draggable') print(source)try: logo = browser.find_element_by_class_name('logo')except NoSuchElementException: print('NO LOGO') browser.switch_to.parent_frame() logo = browser.find_element_by_class_name('logo') print(logo) print(logo.text)
12. Cookies
from selenium import webdriver browser = webdriver.Chrome() browser.implicitly_wait(10)#等待十秒加载不出来就会抛出异常,10秒内加载出来正常返回browser.get('https://www.zhihu.com/explore') input = browser.find_element_by_class_name('zu-top-add-question') print(input)
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
browser.get('https://www.taobao.com/')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)
関連する推奨事項:
CSS3を介して2D変換を実行する方法
JavaScriptの変数とスコープの詳細な説明
以上がSeleniumの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。