나는 파이썬 셀레늄을 처음 접했고 다음과 같은 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의 onclick 속성을 사용하여 셀레늄 클릭을 할 수 있는지 궁금합니다.
나를 올바른 방향으로 인도 할 수있는 어떤 생각이라도 좋을 것입니다. 감사.
답변
파이썬의 경우
from selenium.webdriver import ActionChains
과
ActionChains(browser).click(element).perform()
답변
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()
답변
답변
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’)가 포함 된 두 개의 텍스트 파일이 있어야합니다. 같으면 코드가 작동하지 않습니다. 그렇지 않은 경우 코드는 작동했지만 다른 문제가있는 것입니다. 나에게 문제는 내 후크를 생성하기 위해 콘텐츠를 변환하는 데 필요한 자바 스크립트가 아직 실행되지 않은 것 같습니다.
내가 보는 옵션 :
- 드라이버가 자바 스크립트를 실행하도록 한 다음 찾기 요소 코드를 호출합니다. 이 접근 방식을 따르지 않았으므로 stackoverflow에서 이에 대한 자세한 답변을 찾으십시오.
- ‘output_dest.txt’에서 동일한 결과를 생성하는 유사한 후크를 찾으십시오.
- 아무 것도 클릭하기 전에 잠시 기다리십시오.
xpath2 = “클릭 할 xpath”
WebDriverWait (driver, timeout = 5) .until (lambda x : x.find_element_by_xpath (xpath2))
xpath 접근 방식이 반드시 더 나은 것은 아닙니다. 제가 선호하는 방식이며 선택기 접근 방식을 사용할 수도 있습니다.
답변
웹 사이트 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()