[python] 파이썬 셀레늄 클릭 버튼

나는 파이썬 셀레늄을 처음 접했고 다음과 같은 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>

위 의 SearchReset버튼을 모두 클릭 할 수 있기를 바랍니다 (분명히 개별적으로).

예를 들어 몇 가지 시도했습니다.

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()


답변

이 시도:

firefox를 다운로드하고 “firebug”및 “firepath”플러그인을 추가합니다. 설치 후 웹 페이지로 이동하여 방화범을 시작하고 요소의 xpath를 찾으십시오. 페이지에서 고유하므로 실수하지 마십시오.

그림 참조 :
교수

browser.find_element_by_xpath('just copy and paste the Xpath').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’)가 포함 된 두 개의 텍스트 파일이 있어야합니다. 같으면 코드가 작동하지 않습니다. 그렇지 않은 경우 코드는 작동했지만 다른 문제가있는 것입니다. 나에게 문제는 내 후크를 생성하기 위해 콘텐츠를 변환하는 데 필요한 자바 스크립트가 아직 실행되지 않은 것 같습니다.

내가 보는 옵션 :

  1. 드라이버가 자바 스크립트를 실행하도록 한 다음 찾기 요소 코드를 호출합니다. 이 접근 방식을 따르지 않았으므로 stackoverflow에서 이에 대한 자세한 답변을 찾으십시오.
  2. ‘output_dest.txt’에서 동일한 결과를 생성하는 유사한 후크를 찾으십시오.
  3. 아무 것도 클릭하기 전에 잠시 기다리십시오.

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()


답변