[ปัญหา] การใช้งานลูปใน selenium

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: [ปัญหา] การใช้งานลูปใน selenium

Re: [ปัญหา] การใช้งานลูปใน selenium

โดย rangsan » 10/05/2018 5:26 pm

mindphp เขียน:เมื่อหา a เจอแล้ว เราจะรู้ว่ามี link กี่ link
สวน url ที่จะให้ วนเข้าไปหา จะต้องเป็น การหา

โค้ด: เลือกทั้งหมด

<a href="/บทความ/31-ความรู้ทั่วไป/5454-high-dynamic-range.html">
href="****" <==== tag link ของ url
ถอดส่วนที่เป็น ****
ออกมาจะได้ลิงค์
/บทความ/31-ความรู้ทั่วไป/5454-high-dynamic-range.html
ขอบคุณครับ

Re: [ปัญหา] การใช้งานลูปใน selenium

โดย mindphp » 10/05/2018 5:03 pm

เมื่อหา a เจอแล้ว เราจะรู้ว่ามี link กี่ link
สวน url ที่จะให้ วนเข้าไปหา จะต้องเป็น การหา

โค้ด: เลือกทั้งหมด

<a href="/บทความ/31-ความรู้ทั่วไป/5454-high-dynamic-range.html">
href="****" <==== tag link ของ url
ถอดส่วนที่เป็น ****
ออกมาจะได้ลิงค์
/บทความ/31-ความรู้ทั่วไป/5454-high-dynamic-range.html

Re: [ปัญหา] การใช้งานลูปใน selenium

โดย rangsan » 10/05/2018 4:56 pm

ได้แล้วครับผมใช้คำสั่งตามนี้ครับ

โค้ด: เลือกทั้งหมด

for web_link in link:
    time.sleep(2)
    driver.get(web_link)
    time.sleep(2)
    driver.find_element_by_xpath("//input[@value='เรต']").click()
    time.sleep(2)
    driver.get("https://www.mindphp.com/%E0%B8%9A%E0%B8%97%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1/31-"
               "%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%97%E0%B8%B1%"
               "E0%B9%88%E0%B8%A7%E0%B9%84%E0%B8%9B.html")
หลังจากกด เรต เสร็จ ก็สั่งให้มันไปหน้ารวมครับ :-D

Re: [ปัญหา] การใช้งานลูปใน selenium

โดย thatsawan » 10/05/2018 4:49 pm

เมื่อเราเข้ามาคลิกเเล้ว มันต้องกลับเข้ามาหน้ารวมก่อนที่จะคลิกไปกด เรต ถัดไป ไม่งั้นมันจะหาลิงค์ไปหาต่อไม่เจอ
อันนี้ทำได้หรือยังค่ะ หรือว่าทำยังไงไป

[ปัญหา] การใช้งานลูปใน selenium

โดย rangsan » 10/05/2018 2:01 pm

เบื้องต้นติดปัญหาในเรื่องของการวนลูป ตอนใช้ selenium ทำ automate test

โค้ดในส่วนของการวนลูปแล้วเมื่อ loop รอบแรกแล้วมันไม่ทำงานต่อ loop รอบที่ 2

โค้ด: เลือกทั้งหมด

continue_link = driver.find_element_by_tag_name('a')
title_list = driver.find_elements_by_xpath(
    "//div[@class='category-list']//table[@class='category table table-striped table-bordered table-hover']/tbody/tr//a[@href]")
for web_link in title_list:
    link = web_link.get_attribute("href")
    driver.get(link)
    driver.find_element_by_xpath("//input[@value='เรต']").click()
    time.sleep(1)
อธิบายโค้ดแต่ละส่วน
1. โค้ดส่วนนี้ใช้ในการหา Tag 'a'

โค้ด: เลือกทั้งหมด

continue_link = driver.find_element_by_tag_name('a')
2. โค้ดส่วนนี้ทำการหา Session และ Element เพื่อนำมาแปลงเป็นลิ้งค์

โค้ด: เลือกทั้งหมด

title_list = driver.find_elements_by_xpath(
    "//div[@class='category-list']//table[@class='category table table-striped table-bordered table-hover']/tbody/tr//a[@href]")
3. นำ Session และ Element มาแปลงเป็นลิ้งค์โดยการวนลูป

โค้ด: เลือกทั้งหมด

for web_link in title_list:
    link = web_link.get_attribute("href")
ขั้นตอนต่อภายใน loop เมื่อแปลงลิ้งค์เสร็จแล้วทำการเปิดลิ้งค์ แรกภายใน loop

โค้ด: เลือกทั้งหมด

driver.get(link)
ต่อมาเมื่อเข้ามาใน Link ให้ทำการ กดปุ่มที่ชื่อว่า 'เรต' เพื่อทำการโหวตให้คะแนน

โค้ด: เลือกทั้งหมด

driver.find_element_by_xpath("//input[@value='เรต']").click()
และเมื่อคลิกเสร็จให้มีเวลาโหลดหน้าเว็บ 1 วิ

โค้ด: เลือกทั้งหมด

time.sleep(1)
แต่เมื่อจบ loop แรกแล้วระบบ ไม่วนไปลูปที่ 2 โดยมีผล Error ดังนี้

โค้ด: เลือกทั้งหมด

Traceback (most recent call last):
  File "/home/com003/PycharmProjects/m058/selenium_autorat.py", line 25, in <module>
    link = web_link.get_attribute("href")
  File "/home/com003/PycharmProjects/m058/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 141, in get_attribute
    self, name)
  File "/home/com003/PycharmProjects/m058/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 627, in execute_script
    'args': converted_args})['value']
  File "/home/com003/PycharmProjects/m058/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/home/com003/PycharmProjects/m058/venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <a href="/บทความ/31-ความรู้ทั่วไป/5454-high-dynamic-range.html"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
ผลบนเว็บ
1. เมื่อเข้ามาหน้าเว็บ https://www.mindphp.com และเข้า บทความ >> หมวความรู้ทั่วไป
my_web.png
2. จะเข้ามาในหน้าความรู้ทั่วไป และ ต้องการให้กดบทความแต่ละบทความ
ความรู้ทั่วไป.png
3. เข้าบทความแรกแล้วกด ปุ่ม 'เรต' เมื่อกด เสร็จแล้วต้องการให้กลับไปที่ หน้าความรู้ทั่วไป แต่ระบบ ไม่กลับครับ
finish_click.png
อยากรู้ว่าต้องทำยังไงครับ

ข้างบน