注:このプロジェクトはSelenium構文から離れています
ドキュメント
CDPパッチ(Headfullのみ)はこれを修正する必要があります
(いつか統合します)
不一致でドライバーレスコミュニティに自由に参加してください:)
また、最新の実装については、Dev-Branchを参照してください。
pip uninstall -y selenium-driverless
pip install https://github.com/kaliiiiiiiiii/Selenium-Driverless/archive/refs/heads/dev.zipこのプロジェクトは現在、後援されていません。
pip install selenium-driverless from selenium_driverless import webdriver
from selenium_driverless . types . by import By
import asyncio
async def main ():
options = webdriver . ChromeOptions ()
async with webdriver . Chrome ( options = options ) as driver :
await driver . get ( 'http://nowsecure.nl#relax' , wait_load = True )
await driver . sleep ( 0.5 )
await driver . wait_for_cdp ( "Page.domContentEventFired" , timeout = 15 )
# wait 10s for elem to exist
elem = await driver . find_element ( By . XPATH , '/html/body/div[2]/div/main/p[2]/a' , timeout = 10 )
await elem . click ( move_to = True )
alert = await driver . switch_to . alert
print ( alert . text )
await alert . accept ()
print ( await driver . title )
asyncio . run ( main ())非脱脂、バグは期待する必要があります
from selenium_driverless . sync import webdriver
options = webdriver . ChromeOptions ()
with webdriver . Chrome ( options = options ) as driver :
driver . get ( 'http://nowsecure.nl#relax' )
driver . sleep ( 0.5 )
driver . wait_for_cdp ( "Page.domContentEventFired" , timeout = 15 )
title = driver . title
url = driver . current_url
source = driver . page_source
print ( title ) from selenium_driverless import webdriver
options = webdriver . ChromeOptions ()
options . debugger_address = "127.0.0.1:2005"
# specify if you don't want to run remote
# options.add_argument("--remote-debugging-port=2005")
async with webdriver . Chrome ( options = options ) as driver :
await driver . get ( 'http://nowsecure.nl#relax' , wait_load = True )注:Asyncioが推奨されます。スレッドは、独立したWebDriver.Chromeインスタンスでのみ機能します。
from selenium_driverless . sync import webdriver
from selenium_driverless . utils . utils import read
from selenium_driverless import webdriver
import asyncio
async def target_1_handler ( target ):
await target . get ( 'https://abrahamjuliot.github.io/creepjs/' )
print ( await target . title )
async def target_2_handler ( target ):
await target . get ( "about:blank" )
await target . execute_script ( await script = read ( "/files/js/show_mousemove.js" ))
await target . pointer . move_to ( 500 , 500 , total_time = 2 )
async def main ():
options = webdriver . ChromeOptions ()
async with webdriver . Chrome ( options = options ) as driver :
target_1 = await driver . current_target
target_2 = await driver . new_window ( "tab" , activate = False )
await asyncio . gather (
target_1_handler ( target_1 ),
target_2_handler ( target_2 )
)
await target_1 . focus ()
input ( "press ENTER to exit" )
asyncio . run ( main ())javascriptを実行する from selenium_driverless . sync import webdriver
from selenium_driverless import webdriver
import asyncio
async def main ():
options = webdriver . ChromeOptions ()
async with webdriver . Chrome ( options = options ) as driver :
await driver . get ( 'chrome://version' )
script = """
const proxy = new Proxy(document.documentElement, {
get(target, prop, receiver) {
if(prop === "outerHTML"){
console.log('detected access on "'+prop+'"', receiver)
return "mocked value:)"
}
else{return Reflect.get(...arguments)}
},
});
Object.defineProperty(document, "documentElement", {
value: proxy
})
"""
await driver . execute_script ( script )
src = await driver . execute_script ( "return document.documentElement.outerHTML" , unique_context = True )
mocked = await driver . execute_script ( "return document.documentElement.outerHTML" , unique_context = False )
print ( src , mocked )
asyncio . run ( main ())視覚化については、 @master/tests/show_mousemove.pyを参照してください
pointer = driver . current_pointer
move_kwargs = { "total_time" : 0.7 , "accel" : 2 , "smooth_soft" : 20 }
await pointer . move_to ( 100 , 500 )
await pointer . click ( 500 , 50 , move_kwargs = move_kwargs , move_to = True )swtich_to.frame()がドライバーレスのために非推奨されている場合は、代わりにこれを使用してください
iframes = await driver . find_elements ( By . TAG_NAME , "iframe" )
await asyncio . sleep ( 0.5 )
iframe_document = await iframes [ 0 ]. content_document
# iframe_document.find_elements(...) from selenium_driverless import webdriver
options = webdriver . ChromeOptions ()
# recommended usage
options . update_pref ( "download.prompt_for_download" , False )
# or
options . prefs . update ({ "download" : { "prompt_for_download" : False }})
# supported
options . add_experimental_option ( "prefs" , { "download.prompt_for_download" : False }) from selenium_driverless import webdriver
import asyncio
async def main ():
options = webdriver . ChromeOptions ()
async with webdriver . Chrome ( options = options ) as driver :
context_1 = driver . current_context
await driver . set_auth ( "username" , "password" , "localhost:5000" )
# proxy not supported on windows due to https://bugs.chromium.org/p/chromium/issues/detail?id=1310057
context_2 = await driver . new_context ( proxy_bypass_list = [ "localhost" ], proxy_server = "http://localhost:5000" )
await context_1 . current_target . get ( "https://examle.com" )
await context_2 . get ( "https://examle.com" )
input ( "press ENTER to exit:)" )
asyncio . run ( main ())次のようにカスタム例外処理を実装できます
import selenium_driverless
import sys
handler = ( lambda e : print ( f'Exception in event-handler: n { e . __class__ . __module__ } . { e . __class__ . __name__ } : { e } ' ,
file = sys . stderr ))
sys . modules [ "selenium_driverless" ]. EXC_HANDLER = handler
sys . modules [ "cdp_socket" ]. EXC_HANDLER = handler あなたはバグを見つけましたか?問題を自由に開いてください:)他の質問や提案がありますか?不一致でドライバーレスコミュニティに参加したり、ディスカンスを開いたりしてください
オーリン・エイガーター(別名スティーブ)
この作業はSection 1(k) Creative Commons Attribution-NonCommercial-Sharealike 4.0国際ライセンスの下でライセンスされています。
商業とは、主に商業的優位性または金銭的補償を目的としている、または対象とすることを意味します。
1か月あたり7'000以上の米国ドルと同等の利益を得るあらゆる種類の商業的意図を伴うビジネス、プロジェクト、または公的契約、またはそれに相当する金銭的なものは、この非営利的な定義の対象ではありません。
このプロジェクトを商業的に使用したい場合は、著者に連絡してカスタムライセンスを取得できます。これには通常、現在の利益に基づいて約5〜6%の料金が含まれます。
このプロジェクトは、教育目的のみを目的としています。責任を持って使用します。
著者は保証を提供しておらず、それが何を、どのように使用するかについて、いかなる方法でも責任を負いません。
インスピレーション、コードスニペットなど。