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

แนะนำ สอบถาม ภาษา C สำหรับผู้เริ่มต้น ภาษา Java ภาษา Python

Moderator: mindphp, ผู้ดูแลกระดาน

rangsan
PHP Hero Member
PHP Hero Member
โพสต์: 199
ลงทะเบียนเมื่อ: 30/04/2018 9:44 am

[ปัญหา] การใช้งานลูปใน 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. เมื่อเข้ามาหน้าเว็บ http://www.mindphp.com และเข้า บทความ >> หมวความรู้ทั่วไป
my_web.png


2. จะเข้ามาในหน้าความรู้ทั่วไป และ ต้องการให้กดบทความแต่ละบทความ
ความรู้ทั่วไป.png


3. เข้าบทความแรกแล้วกด ปุ่ม 'เรต' เมื่อกด เสร็จแล้วต้องการให้กลับไปที่ หน้าความรู้ทั่วไป แต่ระบบ ไม่กลับครับ
finish_click.png


อยากรู้ว่าต้องทำยังไงครับ
It’s never too late to start again.

ภาพประจำตัวสมาชิก
thatsawan
PHP VIP Members
PHP VIP Members
โพสต์: 11771
ลงทะเบียนเมื่อ: 31/03/2014 10:02 am
ติดต่อ:

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

โพสต์โดย thatsawan » 10/05/2018 4:49 pm

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

rangsan
PHP Hero Member
PHP Hero Member
โพสต์: 199
ลงทะเบียนเมื่อ: 30/04/2018 9:44 am

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("http://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
It’s never too late to start again.

ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 18251
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

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
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: viewforum.php?f=29
รับอบรม และพัฒนาระบบ: viewtopic.php?f=6&t=2042

rangsan
PHP Hero Member
PHP Hero Member
โพสต์: 199
ลงทะเบียนเมื่อ: 30/04/2018 9:44 am

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


ขอบคุณครับ
It’s never too late to start again.


ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 7 และ บุคคลทั่วไป 0 ท่าน