Skip to content
Trang chủ » Attributeerror: Webdriver Object Has No Attribute Find_Element_By_Xpath

Attributeerror: Webdriver Object Has No Attribute Find_Element_By_Xpath

AttributeError: 'Chrome' object has no attribute 'find_element_by_xpath'

Attributeerror: Webdriver Object Has No Attribute Find_Element_By_Xpath

Understanding the AttributeError in Python

Python is a widely used programming language known for its simplicity and versatility. However, like any other programming language, Python also encounters errors during execution. One common error that developers may come across is the “AttributeError.” In this article, we will delve into a specific AttributeError that occurs when using the Selenium WebDriver package – “webdriver object has no attribute find_element_by_xpath.” We will explore the causes of this error and provide solutions to resolve it.

Overview of the Webdriver Object

Before we delve into the specific AttributeError, let us briefly understand the WebDriver object. Selenium WebDriver is a popular Python library used for automating web browsers’ actions. It allows developers to interact with web elements by simulating user actions such as clicking buttons, filling forms, and extracting data. The WebDriver object acts as a bridge between the Python code and the browser.

The find_element_by_xpath Method

The find_element_by_xpath method in the WebDriver object is used to locate elements on a webpage using XPath expressions. XPath is a powerful language used to navigate XML documents and enables developers to traverse the HTML structure to locate specific elements. The find_element_by_xpath method takes an XPath expression as an argument and returns the first matching element on the page.

Common Causes of the “AttributeError: webdriver object has no attribute find_element_by_xpath”

1. Incorrect WebDriver Initialization: One possible cause of this AttributeError is improper initialization of the WebDriver object. Ensure that you have correctly declared and instantiated the WebDriver object before attempting to use the find_element_by_xpath method.

2. Outdated Selenium Version: It is crucial to keep your libraries up to date. If you are using an outdated version of Selenium, it may not include the find_element_by_xpath method. Ensure that you have installed the latest version of Selenium to access all its features.

3. Typo in Method Name: Double-check if you have made a typographical error when typing the method name. Python is case-sensitive, so make sure the letter casing matches the method name exactly.

4. Incompatible WebDriver Binding: Different web browsers require different WebDriver bindings. If you are using an incorrect WebDriver binding for your specific browser, the find_element_by_xpath method may not be available. Make sure you have the appropriate WebDriver binding for the browser you intend to automate.

Solutions to Resolve the AttributeError

1. Verify WebDriver Initialization: Confirm that you have correctly initialized the WebDriver object before utilizing its methods. Here is a sample code snippet to initialize the WebDriver object for Firefox:

“`python
from selenium import webdriver

# Initialize the WebDriver object
driver = webdriver.Firefox()
“`

2. Update Selenium: To avoid compatibility issues, it is recommended to update the Selenium library to the latest version. You can use the following command to update Selenium using pip:

“`bash
pip install –upgrade selenium
“`

3. Verify Method Name: Double-check the spelling and casing of the find_element_by_xpath method. Ensure that it matches the correct method name accurately.

4. Check Browser Compatibility: Make sure you are using the correct WebDriver binding for the browser you intend to automate. Refer to the official Selenium documentation for information on compatible WebDriver bindings.

Alternative Methods to Locate Elements

If you are still encountering the “AttributeError: webdriver object has no attribute find_element_by_xpath,” you can consider using alternative methods to locate elements. Selenium provides several other methods to locate elements on a webpage, such as find_element_by_id, find_element_by_name, find_element_by_class_name, and find_element_by_css_selector. Experiment with these methods to locate elements effectively.

Best Practices to Avoid AttributeError in Selenium WebDriver

1. Keep Libraries Up to Date: Regularly update your Selenium library to ensure you have access to the latest features and bug fixes.

2. Use Stable WebDriver Bindings: When automating different browsers, always use stable and up-to-date WebDriver bindings that correspond to the browser version.

3. Handle Exception Cases: Implement exception handling mechanisms to catch and handle any exceptions that may occur during the execution of your WebDriver scripts.

4. Utilize Explicit Wait: Utilize the explicit wait mechanism provided by Selenium to wait for specific conditions to be satisfied before interacting with elements. This helps avoid potential timing-related errors.

FAQs:

Q: I’m getting an “invalid locator” error. What could be the cause?
A: This error indicates that the locator used in the find_element_by_xpath method is invalid. Double-check the XPath expression you are using and ensure it correctly identifies the desired element.

Q: I see a deprecation warning for “executable_path.” What does it mean?
A: The deprecation warning for “executable_path” means that this argument is no longer recommended for initializing the WebDriver object. Instead, use a service object to configure the WebDriver with its executable path.

Q: I encountered an “ElementNotInteractableException” while interacting with an element. How can I resolve it?
A: The “ElementNotInteractableException” occurs when an element is present on the webpage but not in a state where it can be interacted with, such as being hidden or disabled. Ensure that the element is visible and in an interactable state before performing any actions on it.

Q: I am seeing a “‘by’ is not defined” error when using Selenium. How can I fix it?
A: This error occurs when the “by” module has not been imported. To resolve it, add the following line at the beginning of your code:

“`python
from selenium.webdriver.common.by import By
“`

Q: I am encountering a “‘webelement’ object is not iterable” error when trying to iterate over elements. How can I overcome it?
A: The “‘webelement’ object is not iterable” error occurs when you try to iterate over a single WebElement instead of a collection of elements. Ensure that you are selecting multiple elements using appropriate locator methods such as find_elements_by_xpath, find_elements_by_class_name, etc., which return a list of WebElements.

In conclusion, the “AttributeError: webdriver object has no attribute find_element_by_xpath” can be resolved by checking your WebDriver initialization, updating Selenium, verifying method names, and ensuring browser compatibility. By following best practices and utilizing alternative methods, you can effectively automate web browsers using Selenium WebDriver.

Attributeerror: ‘Chrome’ Object Has No Attribute ‘Find_Element_By_Xpath’

Keywords searched by users: attributeerror: webdriver object has no attribute find_element_by_xpath selenium.common.exceptions.invalidargumentexception: message: invalid argument: invalid locator, deprecationwarning: executable_path has been deprecated, please pass in a service object, Selenium common exceptions ElementNotInteractableException Message: element not interactable, Selenium get element by id, name ‘by’ is not defined selenium, typeerror: ‘webelement’ object is not iterable, Pip install selenium, From selenium webdriver common by import By

Categories: Top 51 Attributeerror: Webdriver Object Has No Attribute Find_Element_By_Xpath

See more here: nhanvietluanvan.com

Selenium.Common.Exceptions.Invalidargumentexception: Message: Invalid Argument: Invalid Locator

Selenium is a widely used open-source automation testing framework for web applications. It provides a powerful set of tools and libraries for automating browser actions, performing functional testing, and carrying out regression testing. However, while using Selenium, you may come across certain exceptions that act as roadblocks in your test automation journey. This article will focus on one such exception, the “selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator”, explaining what it means, possible causes, and how to resolve it.

An invalid argument exception is thrown when an argument passed to a method or a function is not valid or supported. In the context of Selenium, this exception occurs when an invalid locator is provided while trying to locate an element on a web page. A locator is essentially a string pattern used to identify and locate elements on a webpage for interaction or verification. It can be based on various attributes such as ID, class, name, XPath, CSS selector, etc.

Causes of the “selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator” exception can be diverse:

1. Invalid or incorrectly formatted locators: One common cause is passing a locator string that does not adhere to the correct syntax or pattern. For example, using an incorrect XPath expression, improperly formatted CSS selector, or not enclosing the locator properly within quotes where required.

2. Locators that don’t match any elements: Another possible reason for this exception is providing a locator that does not match any elements on the webpage. This can occur due to changes in the webpage’s structure, dynamic content, incorrect attribute values, or element not being present at the time of execution.

3. Wrong locator strategy: Selenium supports different locator strategies such as ID, class name, tag name, XPath, CSS selector, etc. Using an incorrect or unsupported strategy can also result in the “invalid locator” exception. Make sure to choose the appropriate strategy for locating a specific element.

To diagnose and resolve the “selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator” exception, consider the following steps:

1. Review the locator: Begin by revisiting the locator string that is causing the exception. Check for any typographical errors, missing quotes, or misinterpretation of the webpage’s structure. Ensure that the locator conforms to the expected format supported by the chosen locator strategy.

2. Inspect the webpage: If the locator appears to be correct, inspect the webpage to verify if the intended element exists and can be located by the given locator. You can use browser developer tools or Selenium’s built-in mechanisms like finding elements by tag name, XPath, or CSS selector to cross-verify if the element is present and identifiable.

3. Adapt to dynamic content: If the webpage includes dynamic content, ensure that the locator is robust enough to handle these changes. Consider using more flexible strategies like relative XPath or CSS selectors that can adapt to modifications in the webpage’s structure.

4. Verify attribute values: Occasionally, changes in a webpage’s layout or design can result in attribute value alterations. Double-check attribute values used in locators and ensure they are up-to-date. Inspect the webpage source code or consult developers for updated values, especially if the element’s attributes have been modified.

5. Use alternative locators: If the original locator fails to identify the desired element, consider using alternative locators. For example, if an ID-based locator fails, switch to XPath or CSS selectors to locate the element by its class, tag name, or other available attributes.

FAQs:

Q1. What does the “selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator” exception mean?
A1. This exception signifies that an invalid locator parameter has been provided while trying to locate an element using Selenium.

Q2. Why does the “invalid locator” exception occur?
A2. Causes of this exception include invalid or incorrectly formatted locators, locators that don’t match any elements, or using an unsupported/incorrect locator strategy.

Q3. How can I resolve the “invalid locator” exception?
A3. To resolve this exception, review the locator for syntax errors, cross-verify if the element actually exists on the webpage, adapt to dynamic content, verify attribute values, and use alternative locators if needed.

Q4. Can changes in a webpage affect locators?
A4. Yes, changes in a webpage’s structure, dynamic content, or modified attribute values can render your existing locators invalid. Regularly review and update your locators to keep up with any changes made to the webpage.

Q5. Which locator strategy should I use?
A5. The choice of locator strategy depends on the specific element and its attributes. Some commonly used strategies include ID, class name, XPath, and CSS selector. Select the one that ensures accuracy and robustness for locating the desired elements on your webpage.

In conclusion, the “selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator” exception occurs when an unsupported or incorrect locator is provided while trying to locate an element using Selenium. By carefully reviewing the locators, adapting to dynamic changes, verifying attribute values, and using alternative locators if necessary, you can effectively resolve this exception in your Selenium test automation projects.

Deprecationwarning: Executable_Path Has Been Deprecated, Please Pass In A Service Object

DeprecationWarning: executable_path has been deprecated, please pass in a service object

Introduction:
In the world of software development and automation, web scraping has gained immense popularity. Web scraping involves the extraction of data from websites, and it is widely used for various purposes such as market research, data analysis, and more. One of the popular tools for web scraping is Selenium, an open-source framework that simulates real user interactions with web browsers. However, when using Selenium, developers may come across a common warning message known as “DeprecationWarning: executable_path has been deprecated, please pass in a service object.” In this article, we will dive deep into this warning, understanding its implications, and exploring the solutions to overcome it.

Understanding DeprecationWarning:
A DeprecationWarning is a notice provided by the developers of a software library or framework to inform users that a particular feature or method is being phased out and will be removed in future versions. This warning acts as a reminder to the users to update their code and use the recommended alternatives.

In the case of Selenium, the warning “executable_path has been deprecated, please pass in a service object” refers to a change in the way web drivers are managed. Previously, the executable_path argument was used to specify the path to the browser’s driver executable directly. However, this approach is no longer recommended, and developers are encouraged to use a service object instead.

Benefits of Using a Service Object:
The introduction of a service object in Selenium brings several benefits. It provides a centralized way of managing browser instances, allows better control over the browser’s behavior, and enables easier customization. By using a service object, developers can programmatically manage driver executable paths, define browser options, set up proxy configurations, and more. It offers a more flexible and extensible approach to web scraping automation.

Updating Your Code to Resolve the Warning:
To resolve the DeprecationWarning related to executable_path, you need to update your code to utilize service objects. The exact implementation depends on the specific programming language you are using. Let’s explore how this can be done in Python, one of the most popular languages for web scraping with Selenium.

First, you will need to import the necessary modules from the Selenium library. These typically include the webdriver and service modules.

“`python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
“`

Next, instead of directly specifying the executable_path, you need to create a service object using the appropriate service binaries. For instance, if you are working with the Chrome browser, you can use the ChromeDriverManager package to automatically download and manage the required binaries.

“`python
from webdriver_manager.chrome import ChromeDriverManager
service = Service(ChromeDriverManager().install())
“`

After creating the service object, you can pass it as an argument while creating an instance of the desired web driver class, such as ChromeDriver.

“`python
driver = webdriver.Chrome(service=service)
“`

By following these steps, you can update your code to eliminate the DeprecationWarning and ensure compatibility with future releases of Selenium.

FAQs:

1. Why was executable_path deprecated?
The executable_path argument was deprecated to encourage developers to use a service object, offering more flexibility and control over web drivers. It allows centralized management and customization of browser instances.

2. Is the DeprecationWarning critical?
The DeprecationWarning itself is not critical, but it serves as an important reminder to update your code. Ignoring the warning may lead to compatibility issues with future releases of Selenium or cause unexpected behavior.

3. Can I still use executable_path?
Although executable_path is deprecated, it is still functional in the current versions of Selenium. However, using service objects is the recommended approach for improved stability and maintainability.

4. How can I find the appropriate service binaries for different browsers?
Selenium provides various driver manager libraries, such as ChromeDriverManager, GeckoDriverManager, and EdgeChromiumDriverManager, which can automatically download and manage the required service binaries. These libraries simplify the process of setting up the service object.

5. Are there any alternative solutions to the DeprecationWarning?
The recommended approach is to use service objects. However, if you do not want to update your code immediately, you can suppress the warning by setting the Python warning filter to ignore DeprecationWarning. It is not recommended to rely on this solution for an extended period, as it may result in compatibility issues in the long run.

Conclusion:
As you venture into the world of web scraping using Selenium, it’s important to keep an eye out for deprecation warnings like “executable_path has been deprecated, please pass in a service object. This DeprecationWarning signifies the shift towards using service objects for better management and control over web drivers. By updating your code to utilize service objects, you ensure compatibility with future releases and benefit from enhanced flexibility and customization. Embrace the changes, follow the recommended practices, and keep your web scraping endeavors future-proof.

Images related to the topic attributeerror: webdriver object has no attribute find_element_by_xpath

AttributeError: 'Chrome' object has no attribute 'find_element_by_xpath'
AttributeError: ‘Chrome’ object has no attribute ‘find_element_by_xpath’

Found 46 images related to attributeerror: webdriver object has no attribute find_element_by_xpath theme

Fixing Selenium Attributeerror: 'Webdriver' Object Has No Attribute ' Find_Element_By_Xpath' - Python In Office
Fixing Selenium Attributeerror: ‘Webdriver’ Object Has No Attribute ‘ Find_Element_By_Xpath’ – Python In Office
Attributeerror: 'Webdriver' Object Has No Attribute  'Find_Element_By_Css_Selector' · Issue #371 ·  Hardikvasa/Google-Images-Download · Github
Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Element_By_Css_Selector’ · Issue #371 · Hardikvasa/Google-Images-Download · Github
Attributeerror: 'Chrome' Object Has No Attribute 'Find_Element_By_Xpath' -  Youtube
Attributeerror: ‘Chrome’ Object Has No Attribute ‘Find_Element_By_Xpath’ – Youtube
Selenium定位元素报错——Attributeerror: 'Webdriver' Object Has No Attribute  'Find_Elements_By_Class_Name'_Attributeerror: 'Webdriver' Object Has No  Attribut_小样测试笔记的博客-Csdn博客
Selenium定位元素报错——Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Elements_By_Class_Name’_Attributeerror: ‘Webdriver’ Object Has No Attribut_小样测试笔记的博客-Csdn博客
Attributeerror 'Str' Object Has No Attribute 'Find_Element_By_Xpath'-掘金
Attributeerror ‘Str’ Object Has No Attribute ‘Find_Element_By_Xpath’-掘金
Attributeerror: 'Webdriver' Object Has No Attribute 'Find_Elements_By_Id' -  Support - Appium Discuss
Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Elements_By_Id’ – Support – Appium Discuss
Attributeerror: 'Chrome' Object Has No Attribute 'Find_Element_By_Xpath' -  Youtube
Attributeerror: ‘Chrome’ Object Has No Attribute ‘Find_Element_By_Xpath’ – Youtube
Attributeerror: 'Webdriver' Object Has No Attribute 'Find_Elements_By_Id' -  Support - Appium Discuss
Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Elements_By_Id’ – Support – Appium Discuss
셀레니움 오류 Attributeerror: 'Webdriver' Object Has No Attribute  'Find_Element_By_Css_Selector(Xpath, Class_Name, Id, Link_Text)' 해결방법
셀레니움 오류 Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Element_By_Css_Selector(Xpath, Class_Name, Id, Link_Text)’ 해결방법
Fixing Selenium Attributeerror: 'Webdriver' Object Has No Attribute ' Find_Element_By_Xpath' - Python In Office
Fixing Selenium Attributeerror: ‘Webdriver’ Object Has No Attribute ‘ Find_Element_By_Xpath’ – Python In Office
解決策 求】Attributeerror: 'Webdriver' Object Has No Attribute ' Find_Element_By_Xpath'
解決策 求】Attributeerror: ‘Webdriver’ Object Has No Attribute ‘ Find_Element_By_Xpath’
使用Python的Selenium库,报错Attributeerror: 'Webdriver' Object Has No Attribute ' Find_Element_By_Xpath'_Selenium 报Type Object 'By' Has No Attribute  'Xpath_图书馆学毕业的小锦鲤的博客-Csdn博客
使用Python的Selenium库,报错Attributeerror: ‘Webdriver’ Object Has No Attribute ‘ Find_Element_By_Xpath’_Selenium 报Type Object ‘By’ Has No Attribute ‘Xpath_图书馆学毕业的小锦鲤的博客-Csdn博客
Attributeerror: 'Webdriver' Object Has No Attribute  'Find_Element_By_Css_Selector' · Issue #371 ·  Hardikvasa/Google-Images-Download · Github
Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Element_By_Css_Selector’ · Issue #371 · Hardikvasa/Google-Images-Download · Github
Selenium Update - How To Fix Selenium Not Working With Web-Driver? Easy  Explanation And Fix - Youtube
Selenium Update – How To Fix Selenium Not Working With Web-Driver? Easy Explanation And Fix – Youtube
Python Webdriver Extract Some Financial Data : R/Python
Python Webdriver Extract Some Financial Data : R/Python
Find_Element(By.Xpath) Driver Method - Selenium Python - Geeksforgeeks
Find_Element(By.Xpath) Driver Method – Selenium Python – Geeksforgeeks
Python】Seleniumの仕様が変わっていた!?(2023/06時点)
Python】Seleniumの仕様が変わっていた!?(2023/06時点)
Webdriver“ Object Has No Attribute  “Find_Element_By_Css_Selector“_面.Py的博客-Csdn博客
Webdriver“ Object Has No Attribute “Find_Element_By_Css_Selector“_面.Py的博客-Csdn博客
报错Attributeerror: 'Webdriver' Object Has No Attribute  'Find_Elements_By_Xpath' 解决方法| Ai技术聚合
报错Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Elements_By_Xpath’ 解决方法| Ai技术聚合
Python Selenium Attributeerror With Send_Keys - Stack Overflow
Python Selenium Attributeerror With Send_Keys – Stack Overflow
How To Fix Pycharm Attributeerror: 'Nonetype' Object Has No Attribute 'Get'  - Varhowto
How To Fix Pycharm Attributeerror: ‘Nonetype’ Object Has No Attribute ‘Get’ – Varhowto
Python】SeleniumでWebスクレイピングをする
Python】SeleniumでWebスクレイピングをする
Selenium |Attributeerror: 'Webdriver' Object Has No Attribute  'Find_Element_By_Class_Name' - 老表爱技术
Selenium |Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Element_By_Class_Name’ – 老表爱技术
Handling Checkbox, Dropdowns And Ui Elements In Selenium Python
Handling Checkbox, Dropdowns And Ui Elements In Selenium Python
Attributeerror: 'Webdriver' Object Has No Attribute  'Find_Element_By_Css_Selector' · Issue #371 ·  Hardikvasa/Google-Images-Download · Github
Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Element_By_Css_Selector’ · Issue #371 · Hardikvasa/Google-Images-Download · Github
Python爬蟲教學]整合Python Selenium及Beautifulsoup實現動態網頁爬蟲
Python爬蟲教學]整合Python Selenium及Beautifulsoup實現動態網頁爬蟲
报错Attributeerror: 'Webdriver' Object Has No Attribute  'Find_Elements_By_Xpath' 解决方法| Ai技术聚合
报错Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Elements_By_Xpath’ 解决方法| Ai技术聚合
Attributeerror: 'Chrome' Object Has No Attribute 'Find_Element_By_Xpath' -  Youtube
Attributeerror: ‘Chrome’ Object Has No Attribute ‘Find_Element_By_Xpath’ – Youtube
Active Questions Tagged Selenium - Stack Overflow
Active Questions Tagged Selenium – Stack Overflow
Xpath 'List' Object Has No Attribute 'Click' - Software Quality Assurance &  Testing Stack Exchange
Xpath ‘List’ Object Has No Attribute ‘Click’ – Software Quality Assurance & Testing Stack Exchange
Active Questions Tagged Selenium - Stack Overflow
Active Questions Tagged Selenium – Stack Overflow
十三、Airtest-Selenium做Web自动化测试- Airtest Project Docs
十三、Airtest-Selenium做Web自动化测试- Airtest Project Docs
Code Example]-Unable To Evaluate The Expression Object Has Been Collected
Code Example]-Unable To Evaluate The Expression Object Has Been Collected
Python】Selenium:ブラウザ操作して静的・動的(Ajax、Javascript)ページから情報を取得 | Office54
Python】Selenium:ブラウザ操作して静的・動的(Ajax、Javascript)ページから情報を取得 | Office54
Python爬蟲教學]整合Python Selenium及Beautifulsoup實現動態網頁爬蟲
Python爬蟲教學]整合Python Selenium及Beautifulsoup實現動態網頁爬蟲
Python Selenium报错:Attributeerror: 'Webdriver' Object Has No Attribute  'Find_Element_By_Id'_啾啾景的博客-Csdn博客
Python Selenium报错:Attributeerror: ‘Webdriver’ Object Has No Attribute ‘Find_Element_By_Id’_啾啾景的博客-Csdn博客
Python] Selenium 크롤링 Find_Element_By_Css_Selector 더 이상 사용 불가 By  Bskyvision.Com
Python] Selenium 크롤링 Find_Element_By_Css_Selector 더 이상 사용 불가 By Bskyvision.Com
How To Build A Python Weather Notification Bot Using Openweathermap Api -  Python In Office
How To Build A Python Weather Notification Bot Using Openweathermap Api – Python In Office
Selenium 遇到的问题,页面下拉报错- 霍格沃兹答疑区- 测试人社区
Selenium 遇到的问题,页面下拉报错- 霍格沃兹答疑区- 测试人社区
무작정 웹크롤링 코드리뷰 도전기
무작정 웹크롤링 코드리뷰 도전기
무료] 파이썬 무료 강의 (활용편4) - 업무자동화 (Rpa) 질문 & 답변 - 인프런 | 강의
무료] 파이썬 무료 강의 (활용편4) – 업무자동화 (Rpa) 질문 & 답변 – 인프런 | 강의

Article link: attributeerror: webdriver object has no attribute find_element_by_xpath.

Learn more about the topic attributeerror: webdriver object has no attribute find_element_by_xpath.

See more: nhanvietluanvan.com/luat-hoc

Leave a Reply

Your email address will not be published. Required fields are marked *