1. ページを開いた(ログインしている)ブラウザを制御します。
1. 簡単な説明:
自動実行中、一部のページ操作では、ユーザーがアクセスするためにログインする必要があります。自動化スクリプトを実行するたびに再度ログインして SMS 検証コードを入力する必要がある場合、自動化の迅速な操作には役立ちません。したがって、自動化スクリプトが必要であり、自動操作を実行するために開かれたページに対応するブラウザを制御する必要があります。
2. 一般的な操作手順:
1> cmd を実行し、ブラウザを起動します
2> 開いているブラウザに手動でログインします
3> Python スクリプトを実行し、開いているブラウザを制御し、その後の操作を実行します
3. 具体的な操作:
1) まず、Windows の cmd モードで次のコードを実行するか、.bat スクリプトとして保存してクリックして実行します。
正常に実行されると、ブラウザが起動し、タブが開きます。
start_chrome.bat脚本:
cd /d C:\Users\nikey\AppData\Local\Google\Chrome\Application
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"
pause
- C:\Users\nikey\AppData\Local\Google\Chrome\Application
ローカルの Chrome インストール ディレクトリに移動します
- リモートデバッグポート=9222
指定されたポート番号 (後続の Python スクリプトで使用されます。空いているポート番号を指定する必要があります)
- user-data-dir="C:\selenum\AutomationProfile"
ユーザーのデフォルト構成ファイルが上書きされないように、オートメーションの実行時に指定された構成ファイル
2) ポート番号を指定して、開いているブラウザを制御します
from selenium import webdriver
import time
# 控制已经打开的浏览器,端口号使用cmd运行时指定的端口号
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
bro = webdriver.Chrome(options=chrome_options)
bro.maximize_window()
# 访问一个网页
url = 'https://www.baidu.com/'
bro.get(url)
time.sleep(1)
2. ブラウザ関連の操作
1. 自動化スクリプトの実行が終了しても、ブラウザは自動的に閉じられません。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True) #不自动关闭浏览器
options.add_argument('--start-maximized')#浏览器窗口最大化
bro = webdriver.Chrome(options=options)
bro.get('https://www.baidu.com')
2. ブラウザのタブを閉じてブラウザを終了します
from selenium import webdriver
# 启动浏览器, 打开百度页面
bro = webdriver.Chrome()
url = 'https://www.baidu.com/'
bro.get(url)
# 关闭当前标签页
bro.close()
# 退出浏览器
bro.quit()
3. ブラウザの多彩な操作機能
1) 新しいタブを開く
2) 新しいタブに切り替えます
3) マウスホイールをシミュレートしてページの一番下までスライドさせます。
4) 現在のページのソース コードを取得し、キーワードを通じてインターセプトするフィールドを特定します。
from selenium import webdriver
import time
options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True) #不自动关闭浏览器
options.add_argument('--start-maximized') #浏览器窗口最大化
bro = webdriver.Chrome(options=options)
url = 'https://www.baidu.com'
bro.get(url)
print(bro.title)
new_url = 'http://news.baidu.com/'
# 打开新的标签页
new_window = 'window.open("{}")'.format(new_url) # js函数,此方法适用于所有的浏览器
bro.execute_script(new_window)
# 获取所有的句柄(打开新标签后,要重新获取窗口句柄)
windows = bro.window_handles
# 切换到 新打开的标签页
bro.switch_to.window(windows[1])
print(bro.title)
# 模拟鼠标滚轮,滑动页面至底部
js = "window.scrollTo(0, document.body.scrollHeight)"
bro.execute_script(js) # 模拟鼠标滚轮,滑动页面至底部
# 获取当前页面的源码
page_text = bro.page_source
# print(page_text)
# 查找HTML页面中的关键字(页面中有多个,查找最后一个):upload_list_tr
key_str = 'upload_list_tr'
key_str_pos = page_text.rfind(key_str)
# print(key_str_pos)
# 通过字符串截取,找到fdId编号,通过fdId打开新的标签页
fdId = page_text[key_str_pos-41:key_str_pos-9]
# print(fdId)
new_file_url = 'http://news.baidu.com/view.jsp?fdId=' + fdId
print(new_file_url)
# 打开新的标签页
new_window = 'window.open("{}")'.format(new_file_url) # js函数,此方法适用于所有的浏览器
bro.execute_script(new_window)
time.sleep(1)
# 关闭当前页面
# bro.close()
# 切换到 第一个打开的标签页
bro.switch_to.window(windows[0])
print(bro.title)
4. ページに iframe を埋め込み、iframe 内の xpath を見つけます。
from selenium import webdriver
from selenium.webdriver.common.by import By
url = 'https://www.XXXXXX.com'
bro = webdriver.Chrome()
bro.get(url)
# 切换到iframe中,才能识别数据的xpath标签
# 获取iframe的xpath
iframe_xpath = '/html/body/div[4]/div[1]/div/div/div[3]/div/div/div[2]/div/div[1]/div/div/iframe'
iframe = bro.find_element(By.XPATH, iframe_xpath)
# 获取iframe标签中的属性值
attr_value = iframe.get_attribute("kmss_fdid")
print(attr_value)
# 切换进入iframe中
bro.switch_to.frame(iframe)
# 定位到iframe中记录的xpath,点击记录
xpath = '/html/body/div[4]/div/div[4]/div[1]/div/div/table/tbody/tr[1]'
bro.find_element(By.XPATH, xpath).click()
一般的な問題の解決策:
1. デバッガーコンソールに文字化けが表示される
File Encoding
Project Encoding
に 変更するだけですGBK
。