Selenium을 사용하여 스크립트를 작성했으며 브라우저 모드에서 작동합니다. 그러나 헤드리스 모드에서 시도하면 더 이상 작동하지 않습니다. 창 크기를 화면 해상도로 변경하는 인수를 추가했습니다. 그러나 여전히 문제가 해결되지 않았습니다. 이상한 점은 일부 버튼이 작동하지만 다른 버튼은 작동하지 않는다는 것입니다. 무슨 일이 일어나고 있는지 잘 모르겠습니다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import time
user_input='xyz'
def get_sequence():
options = Options()
options.add_argument("--window-size=1920,1080");
options.add_argument("--start-maximized");
options.add_argument("--headless");
driver = webdriver.Chrome(options=options)
driver.get('https://clims4.genewiz.com/RegisterAccount/Login')
fill_box = driver.find_element_by_xpath('//*[@id="LoginName"]')
fill_box.clear()
fill_box.send_keys('*****')
fill_box = driver.find_element_by_xpath('//*[@id="Password"]')
fill_box.send_keys('*****')
driver.find_element_by_xpath('//*[@id="btnSubmit"]').click()
table = driver.find_element_by_xpath('//*[@id="myOrdersTable"]/tbody')
for i,td in enumerate(table.find_elements_by_xpath('//*[@id="myOrdersTable"]/tbody/tr/td[4]'),1):
if td.text == user_input:
driver.find_element_by_xpath(f'//*[@id="myOrdersTable"]/tbody/tr[{i}]/td[11]/button').click()
break
time.sleep(5)
seq_list=[]
table=driver.find_element_by_xpath('//*[@id="gwzSngrOrderResultPanelRoot"]/table/tbody')
for x,sequence in enumerate(table.find_elements_by_xpath('//*[@id="gwzSngrOrderResultPanelRoot"]/table/tbody/tr/td[9]'),1):
driver.find_element_by_xpath(f'//*[@id="gwzSngrOrderResultPanelRoot"]/table/tbody/tr[{x}]/td[9]/span[2]').click()
time.sleep(5)
seq_info=driver.find_element_by_xpath('//*[@id="gwzViewResultsModalDialog"]/div/div/div[2]/div')
seq_list.append([seq_info.text])
driver.find_element_by_xpath('//*[@id="gwzViewResultsModalDialog"]/div/div/div[3]/button').click()
time.sleep(5)
get_sequence():
위의 내용은 헤드리스 옵션 / 인수를 제거하면 작동합니다. 이것은 현재 위의 출력입니다.
[0705/143642.917:INFO:CONSOLE(66)] "visitorResponseData set", source: https://eastprodcdn.azureedge.net/bundles/legacy/velaro.inline.9b226ddb.js (66)
[0705/143644.640:INFO:CONSOLE(3)] "Hotjar not launching due to suspicious userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/83.0.4103.116 Safari/537.36", source: https://static.hotjar.com/c/hotjar-1144113.js?sv=6 (3)
[0705/143645.765:INFO:CONSOLE(66)] "visitorResponseData set", source: https://eastprodcdn.azureedge.net/bundles/legacy/velaro.inline.9b226ddb.js (66)
driver.find_element_by_xpath(f'//*[@id="myOrdersTable"]/tbody/tr[{i}]/td[11]/button').click()
File "C:\Users\Sams PC\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "C:\Users\Sams PC\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:\Users\Sams PC\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\Sams PC\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <button type="button" class="btn btn-sm gwz-grid-action" data-orderid="155e7035-5540-4fc5-8045-247511d0f7dc">...</button> is not clickable at point (1793, 959). Other element would receive the click: <div id="hs-eu-cookie-confirmation" class="hs-cookie-notification-position-bottom" data-nosnippet="">...</div>
(Session info: headless chrome=83.0.4103.116)
가독성을 높이기 위해이 스크립트는 사이트로 이동하여 사이트 내의 테이블에서 user_input을 검색 한 다음 버튼을 클릭합니다. 그러면 새 페이지에 사용자가 클릭 한 버튼이있는 다른 테이블이 포함되어 추출 할 데이터가 포함 된 팝업이 생성됩니다.
편집 : 다음은 내가 시도한 솔루션입니다.
options = Options()
options.add_argument("--window-size=1920,1080")
options.add_argument("--start-maximized")
options.add_argument("--disable-gpu")
options.add_argument('--disable-extensions')
options.add_argument('--no-sandbox')
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
또한 브라우저 창 크기는 브라우저 모드 (작동했을 때)에서 1554,882 였으므로 다음을 추가했습니다.
driver.set_window_size(1554,842)
그리고 그것은 여전히 작동하지 않았습니다. 이것은 브라우저 크기 문제가 아닙니다.
문제를 해결하고 쿠키를 사용하는 사이트에 대한 팝업이었습니다. 이전에 이미 해당 팝업을 수락했고 사이트에서 나를 기억했기 때문에 브라우저 모드에서는 표시되지 않았습니다. 또한 페이지 하단에 있었기 때문에 다른 버튼에도 영향을 미치지 않았습니다 (버튼 중 하나와 겹치는 부분, wrror를 제공하는 버튼). 시크릿 모드를 사용하여 다시 팝업되도록하고 해당 요소를 가져 와서 나머지 스크립트를 진행하기 전에 해당 버튼을 클릭하는 추가 줄을 추가 할 수있었습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다