python selenium 클릭 버튼
저는 파이썬 셀레늄에 익숙하지 않아서 다음과 같은 html 구조를 가진 버튼을 클릭하려고 합니다.
<div class="b_div">
<div class="button c_button s_button" onclick="submitForm('mTF')">
<input class="very_small" type="button"></input>
<div class="s_image"></div>
<span>
Search
</span>
</div>
<div class="button c_button s_button" onclick="submitForm('rMTF')" style="margin-bottom: 30px;">
<input class="v_small" type="button"></input>
<span>
Reset
</span>
</div>
</div>
두 가지를 모두 클릭할 수 있습니다.Search
그리고.Reset
위의 버튼(개별로 표시됨).
저는 몇 가지를 시도해 보았습니다. 예를 예로 들 수 있습니다.
driver.find_element_by_css_selector('.button .c_button .s_button').click()
아니면,
driver.find_element_by_name('s_image').click()
아니면,
driver.find_element_by_class_name('s_image').click()
하지만, 저는 항상 결국엔NoSuchElementException
예:
selenium.common.exceptions.NoSuchElementException: Message: u'Unable to locate element: {"method":"name","selector":"s_image"}' ;
HTML의 온클릭 속성을 사용하여 셀레늄을 클릭할 수 있는지 궁금합니다.
저에게 올바른 방향을 제시할 수 있는 어떤 생각이라도 좋습니다.감사해요.
CSS 셀렉터에서 클래스 사이의 공백 제거:
driver.find_element_by_css_selector('.button .c_button .s_button').click()
# ^ ^
=>
driver.find_element_by_css_selector('.button.c_button.s_button').click()
사용해 보십시오.
파이어폭스를 다운로드하고 플러그인 "firebug"와 "firepath"를 추가합니다. 설치한 후 웹 페이지로 이동하여 파이어버그를 시작하고 요소의 xpath를 찾으면 페이지에서 고유하므로 실수가 발생하지 않습니다.
사진 보기:
browser.find_element_by_xpath('just copy and paste the Xpath').click()
python의 경우 다음을 사용합니다.
from selenium.webdriver import ActionChains
그리고.
ActionChains(browser).click(element).perform()
웹사이트 https://adviserinfo.sec.gov/compilation 을 열고 버튼을 클릭하여 파일을 다운로드하고 파이썬 셀레늄을 사용하면 팝업을 닫고 싶습니다.
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
import time
from selenium.webdriver.chrome.options import Options
#For Mac - If you use windows change the chromedriver location
chrome_path = '/usr/local/bin/chromedriver'
driver = webdriver.Chrome(chrome_path)
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--disable-popup-blocking")
driver.maximize_window()
driver.get("https://adviserinfo.sec.gov/compilation")
# driver.get("https://adviserinfo.sec.gov/")
# tabName = driver.find_element_by_link_text("Investment Adviser Data")
# tabName.click()
time.sleep(3)
# report1 = driver.find_element_by_xpath("//div[@class='compilation-container ng-scope layout-column flex']//div[1]//div[1]//div[1]//div[2]//button[1]")
report1 = driver.find_element_by_xpath("//button[@analytics-label='IAPD - SEC Investment Adviser Report (GZIP)']")
# print(report1)
report1.click()
time.sleep(5)
driver.close()
Phantomjs를 브라우저로 사용하는 것과 같은 문제가 있어서 다음과 같은 방법으로 해결했습니다.
driver.find_element_by_css_selector('div.button.c_button.s_button').click()
기본적으로 견적서에 DIV 태그의 이름을 추가했습니다.
다음 디버깅 프로세스는 유사한 문제를 해결하는 데 도움이 되었습니다.
with open("output_init.txt", "w") as text_file:
text_file.write(driver.page_source.encode('ascii','ignore'))
xpath1 = "the xpath of the link you want to click on"
destination_page_link = driver.find_element_by_xpath(xpath1)
destination_page_link.click()
with open("output_dest.txt", "w") as text_file:
text_file.write(driver.page_source.encode('ascii','ignore'))
그런 다음 두 개의 텍스트 파일과 함께 사용자가 있던 초기 페이지('output_init.txt') 및 버튼을 클릭한 후 전달된 페이지('output_dest.txt')가 있어야 합니다.만약 그것들이 같다면, 네, 당신의 코드는 작동하지 않았습니다.그렇지 않으면 코드가 작동했지만 다른 문제가 있습니다.저에게 문제는 제 후크를 생산하기 위해 콘텐츠를 변환하는 필요한 자바스크립트가 아직 실행되지 않았다는 것이었습니다.
내가 보기에 당신의 선택사항은 다음과 같습니다.
- 드라이버에게 Javascript를 실행한 다음 find 요소 코드를 호출하도록 합니다.스택 오버플로에 대한 자세한 답변은 이 접근 방식을 따르지 않았기 때문에 확인하십시오.
- 'output_dest'에서 비슷한 후크를 찾기만 하면 됩니다.txt'도 같은 결과를 낼 것이고, 그것이 제가 한 일입니다.
- 다음을 클릭하기 전에 잠시 기다려 보십시오.
xpath2 = "클릭할 xpath"
WebDriverWait(드라이버, 시간 초과=5).until(확장 x: x.find_details_by_xpath(xpath2))
xpath 접근 방식이 반드시 더 나은 것은 아닙니다. 저는 그냥 선호합니다. 선택기 접근 방식을 사용할 수도 있습니다.
저도 같은 문제가 있었고 Firefox에서 다음과 같은 단계로 버튼 요소를 받았습니다.
- 마우스 오른쪽 단추를 누른 후 "접근성 속성 검사"를 선택합니다.
- 그러면 검사자가 열립니다.강조 표시된 줄을 마우스 오른쪽 단추로 클릭하고 "JSON으로 인쇄"를 클릭합니다.
- 새 탭이 열립니다.찾다를 .
nodeCssSelector
값 복사를 .
이를 통해 야후라는 웹사이트의 쿠키를 사용할 수 있게 되었습니다.
url = "https://yahoo.com"
driver = Firefox(executable_path="geckodriver.exe")
driver.get(url)
driver.find_element_by_css_selector("button.btn:nth-child(5)").click()
저는 이것을 더 테스트했고 그것은 제가 개별 쿠키를 쉽게 받아들일 수 있게 해주었습니다.앞에서 언급한 단계를 반복하면 버튼 이름이 표시됩니다.
url = "https://yahoo.com"
driver = Firefox(executable_path="geckodriver.exe")
driver.get(url)
driver.find_element_by_css_selector("a.btn").click()
driver.find_element_by_css_selector(".firstPartyAds > div:nth-child(2) > label:nth-child(1)").click()
driver.find_element_by_css_selector(".preciseGeolocation > div:nth-child(2) > label:nth-child(1)").click()
driver.find_element_by_css_selector("button.btn").click()
또 다른 방법은
- 관심 버튼을 마우스 오른쪽 버튼으로 클릭하고 "Inspect"를 선택합니다.
- 강조 표시된 줄을 마우스 오른쪽 버튼으로 클릭하고 "복사 -> CSS 선택기" 또는 필요한 모든 항목을 클릭합니다(XPath를 포함한 여러 옵션이 있음).
그러나 두 번째 방법은 복사하는 내용에 따라 공백이 포함될 수 있으므로 수동으로 제거해야 할 수도 있습니다.첫 번째 방법이 더 완벽한 것처럼 보이지만 파이어폭스가 아닌 다른 브라우저에서 작동하는지/어떻게 작동하는지는 모르겠습니다.두 번째 방법은 모든 브라우저에서 작동해야 합니다.
e = driver.find_element(By.XPATH, 's_image').click()
가끔은 작동하지 않습니다! 당신은 시도할 수 있습니다:
e = driver.find_element(By.XPATH, 's_image') driver.execute_script("arguments[0].click();", e)
이 코드를 사용하여 버튼 클릭
# finding the button using ID
button = driver.find_element_by_id(ID)
# clicking on the button
button.click()
언급URL : https://stackoverflow.com/questions/21350605/python-selenium-click-on-button
'programing' 카테고리의 다른 글
SYS_OP_C2C 내부 변환으로 인한 Oracle SQL 실행 계획 변경 (0) | 2023.07.26 |
---|---|
HTML5 비디오 태그의 소스 변경 (0) | 2023.07.26 |
주석이 포함된 코드 블록을 주석 처리할 수 있습니까? (0) | 2023.07.26 |
Javascript: 모든 종류의 요청을 취소합니다. (0) | 2023.07.26 |
Oracle: 사용자 암호를 만료되지 않도록 설정하는 방법은 무엇입니까? (0) | 2023.07.26 |