পাইথন সেলেনিয়াম বোতামে ক্লিক করুন


88

আমি পাইথন সেলেনিয়ামে বেশ নতুন এবং আমি একটি বোতামে ক্লিক করার চেষ্টা করছি যার নীচের এইচটিএমএল কাঠামো রয়েছে:

<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"}' ;

আমি ভাবছি যদি সেলেনিয়াম ক্লিক করতে আমি কোনওভাবে এইচটিএমএল এর অনক্লিক বৈশিষ্ট্যগুলি ব্যবহার করতে পারি?

আমাকে সঠিক দিকে নির্দেশ করতে পারে এমন কোনও ভাবনা দুর্দান্ত হবে। ধন্যবাদ

উত্তর:



106

সিএসএস নির্বাচকের ক্লাসগুলির মধ্যে স্থান সরান:

driver.find_element_by_css_selector('.button .c_button .s_button').click()
#                                           ^         ^

=>

driver.find_element_by_css_selector('.button.c_button.s_button').click()

4
আপনার পরামর্শ অনুযায়ী আমি চেষ্টা করেছি। আমি একই NoSuchElementExceptionত্রুটি পেতে !
এজেডাব্লু

4
@ এজেডাব্লু, চেষ্টা করুন print(driver.page_source)এবং এইচটিএমএলটিতে আসলে উপাদান রয়েছে তা পরীক্ষা করুন।
ফলসেট্রু

ধন্যবাদ আমি করেছি print(driver.page_source)এবং দেখতে পেয়েছি যে এটির নামকরণ আলাদা ছিল। অদ্ভুত। আমি যখন স্পেসগুলি সরিয়ে নিয়ে নাম পরিবর্তন করেছি তখন এটি এখন ক্লিক করে। অনুসরণ করতে গিয়ে: যেমন আপনি রিসেট বোতামটিও দেখতে পাচ্ছেন এবং অনুসন্ধান বোতামটিও একই রকম class: এই ক্ষেত্রে ক্লিক করার সময় কীভাবে অনুসন্ধান এবং রিসেট বোতামগুলির মধ্যে পার্থক্য করা যায়?
এজেডাব্লু

4
@ এজেডাব্লু, এক্সপ্যাথটি কীভাবে ব্যবহার করছেন:driver.find_element_by_xpath('.//div[@class="button c_button s_button"][contains(., "Search")]')
ফলসেট্রু

4
@ মুর্তজা এলএসসি, আপনি যদি বোঝাতে চান যে সিস্টেমটিতে এটি জিইআইআই নেই সেখানে এটি সম্ভব। হেডলেস ব্রাউজারগুলি ব্যবহার করুন। উদাহরণস্বরূপ, ফ্যান্টমজেএস।
ফলসেট্রু

31

এটা চেষ্টা কর:

ফায়ারফক্স ডাউনলোড করুন, "ফায়ারব্যাগ" এবং "ফায়ারপথ" প্লাগইন যুক্ত করুন; এগুলি ইনস্টল করার পরে আপনার ওয়েবপৃষ্ঠায় যান, ফায়ারব্যাগ শুরু করুন এবং উপাদানটির এক্সপ্যাথ সন্ধান করুন এটি পৃষ্ঠাতে অনন্য, যাতে আপনি কোনও ভুল করতে না পারেন।

ছবি দেখো: নির্দেশ

browser.find_element_by_xpath('just copy and paste the Xpath').click()


4
এই ধরনের দুর্দান্ত জীবনচরণের জন্য আপনাকে অনেক ধন্যবাদ। এটি বেশ কয়েক ঘন্টা সাশ্রয় করেছে
হিরো গাই

এটি কোনও ম্যাক বিসি-তে কাজ করে না ফায়ারবগ এবং ফায়ার পাথ অ্যাড অন হিসাবে দেখায় না
বব

কিছু সময় এটি ওএসের সমস্যা নয় তবে ফায়ারফক্স সংস্করণে, ফায়ারপথের সাথে শেষ ফায়ারফক্স সংস্করণে কিছু সমস্যা আছে, আমি ফায়ারফক্স ব্যবহার করছি 55.0.3
কার্লো 1585

4
আপনি ফায়ারফক্সে উপাদানটি খুঁজে পেতে পারেন: সরঞ্জাম-> ওয়েব বিকাশকারী>> পরিদর্শক; জিইউআই-র বোতামটি ক্লিক করুন, পরিদর্শকের অংশে, প্রাসঙ্গিক কোডে> মাউসের সাহায্যে ডান ক্লিক করুন-> অনুলিপি করুন এবং চয়ন করুন: সিএসএস সিলেক্টর / সিএসএস পাথ / এক্সপাথ ...
নীড়

4

ফ্যান্টমজগুলি ব্রাউজার হিসাবে ব্যবহার করার ক্ষেত্রে আমার একই সমস্যা ছিল, তাই আমি নিম্নলিখিত উপায়ে সমাধান করেছি:

driver.find_element_by_css_selector('div.button.c_button.s_button').click()

মূলত আমি উদ্ধৃতিতে ডিআইভি ট্যাগের নাম যুক্ত করেছি।


3

https://adviserinfo.sec.gov/compilation একটি ওয়েবসাইট খুলুন এবং ফাইলটি ডাউনলোড করতে বোতামে ক্লিক করুন এবং আমি যদি পাইথন সেলেনিয়াম ব্যবহার করি তবে পপ আপটি বন্ধ করতে চাই i

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

2

নিম্নলিখিত ডিবাগিং প্রক্রিয়া আমাকে অনুরূপ সমস্যা সমাধানে সহায়তা করেছে।

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

তারপরে আপনি যে প্রাথমিক পৃষ্ঠায় ছিলেন ('আউটপুট_ইনিট.টিএসটিএসটি') এবং বোতামটি ক্লিক করে ('আউটপুট_ডেস্ট.টেক্সট') পরে আপনি যে পৃষ্ঠাটিতে ফরোয়ার্ড করেছিলেন সেগুলি সহ দুটি পাঠ্য ফাইল থাকা উচিত। যদি সেগুলি একই হয়, তবে হ্যাঁ, আপনার কোডটি কার্যকর হয়নি। যদি সেগুলি না হয় তবে আপনার কোডটি কাজ করেছে তবে আপনার আর একটি সমস্যা আছে। আমার কাছে সমস্যাটি মনে হয়েছিল যে প্রয়োজনীয় জাভাস্ক্রিপ্ট যা আমার হুক তৈরির জন্য সামগ্রীটিকে রূপান্তর করেছিল তা এখনও কার্যকর হয়নি।

আপনার বিকল্পগুলি যেমন আমি দেখছি:

  1. ড্রাইভারকে জাভাস্ক্রিপ্ট কার্যকর করতে এবং তারপরে আপনার সন্ধানের উপাদান কোডটি কল করুন। স্ট্যাকওভারফ্লোতে এই সম্পর্কে আরও বিস্তারিত উত্তরগুলি সন্ধান করুন, কারণ আমি এই পদ্ধতির অনুসরণ করি নি।
  2. 'আউটপুট_ডেস্ট.টেক্সট' তে কেবল একটি তুলনামূলক হুক সন্ধান করুন যা একই ফলাফল তৈরি করবে, যা আমি করেছি।
  3. কিছু ক্লিক করার আগে কিছুটা অপেক্ষা করার চেষ্টা করুন:

xpath2 = "আপনার এক্সপ্যাথ যে আপনি ক্লিক করতে চলেছেন"

ওয়েবড্রাইভারওয়েট (ড্রাইভার, সময়সীমা = 5) .উন্টিল (ল্যাম্বদা এক্স: এক্স

এক্সপথ পদ্ধতির অগত্যা আরও ভাল নয়, আমি কেবল এটি পছন্দ করি, আপনি নিজের নির্বাচক পদ্ধতিরও ব্যবহার করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.