python+selenium+chrome back,forward,refreshを実現する際の注意点
python+selenium+chrome back,forward,refreshを実現する際の注意点
1.背景
seleniumシミュレーションブラウザを使用する場合、ナビゲーションバーへの3つのボタン:後退、前進、リフレッシュを使用することがよくあります.に表示されます.seleniumに対応する方法は,back(),forward(),refresh()である.しかし、前に配置した要素を直接使用すると、要素が焦げてしまうという問題が発生します.
2.環境 python 3.6.1 システム:win 7 IDE:pycharm chromeブラウザ をインストールしました chromedriver を構成 selenium 3.7.0
3.コード解析の結果、前後の2つの淘宝ページでは、入力ボックスのIDが異なり、古い要素は使用できません. と同様に、ページがrefreshされると、要素のIDも変化する. line:49行を注釈すると、 という状況になります.すなわち、ページが変更され、要素が再ロードされると、要素のIDが変化し、再取得が必要となる.
1.背景
seleniumシミュレーションブラウザを使用する場合、ナビゲーションバーへの3つのボタン:後退、前進、リフレッシュを使用することがよくあります.に表示されます.seleniumに対応する方法は,back(),forward(),refresh()である.しかし、前に配置した要素を直接使用すると、要素が焦げてしまうという問題が発生します.
2.環境
3.コード解析
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
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import time
import random
# xpath
chrome_options = webdriver.ChromeOptions()
extension_path = 'D:/extension/XPath-Helper_v2.0.2.crx'
chrome_options.add_extension(extension_path)
browser = webdriver.Chrome(chrome_options=chrome_options)
# browser.maximize_window()
wait = WebDriverWait(browser, 25)
waitPopWindow = WebDriverWait(browser, 25)
firstUrl = "https://www.taobao.com/"
browser.get(firstUrl)
time.sleep(random.randrange(3, 5, 1))
#
searchInput = browser.find_element_by_xpath("//input[@id='q' and @class='search-combobox-input']")
print(f"searchInputBefore = {searchInput}")
searchInput.click()
searchInput.send_keys("abcTest")
time.sleep(random.randrange(3, 5, 1))
# :back()
# amazon
secondUrl = "https://www.amazon.com/"
browser.get(secondUrl)
time.sleep(random.randrange(3, 5, 1))
#
browser.back()
# :refresh()
# browser.refresh()
time.sleep(random.randrange(3, 5, 1))
#
searchInput = browser.find_element_by_xpath("//input[@id='q' and @class='search-combobox-input']")
print(f"searchInputAfter = {searchInput}")
searchInput.send_keys("abcTest")
time.sleep(random.randrange(3, 5, 1))
# amazon
browser.forward()
print(f" ")
time.sleep(random.randrange(3, 5, 1))
browser.quit()
searchInputBefore = .webdriver.remote.webelement.WebElement (session="1adae9c334324c3e9137796ea16fdc12", element="0.7525547144214484-1")>
searchInputAfter = .webdriver.remote.webelement.WebElement (session="1adae9c334324c3e9137796ea16fdc12", element="0.746747334537434-1")>
Traceback (most recent call last):
File "E:/PyCharmCode/amazonSearchClick/test.py", line 48, in
searchInput.send_keys("abcTest")
File "E:\Miniconda\lib\site-packages\selenium\webdriver\remote\webelement.py", line 352, in send_keys
'value': keys_to_typing(value)})
File "E:\Miniconda\lib\site-packages\selenium\webdriver\remote\webelement.py", line 501, in _execute
return self._parent.execute(command, params)
File "E:\Miniconda\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 308, in execute
self.error_handler.check_response(response)
File "E:\Miniconda\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
(Session info: chrome=63.0.3239.132)
(Driver info: chromedriver=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 6.1.7601 SP1 x86_64)